Thread View: pl.comp.lang.python
3 messages
3 total messages
Started by Nateysz
Wed, 24 Nov 2010 22:31
[jak zdefiniować zmienną globalną]
Author: Nateysz
Date: Wed, 24 Nov 2010 22:31
Date: Wed, 24 Nov 2010 22:31
65 lines
2882 bytes
2882 bytes
Wiem, wiem - to pewnie banalne, ale nie mogę znaleźć rozwiązania.
Otóż chcę mieć możliwość wywołania z jednego skryptu Pythona innego
(wszystko działa pod ArcGIS-em).
Wygląda to tak, jak wartość zmiennej komunikat była czyszczona...
Skrypty wyglądają tak:
=================================================================
# Import system modules
import sys, string, os, arcgisscripting
# Create the Geoprocessor object
gp = arcgisscripting.create()
global komunikat
komunikat="wszystko wporzo"
# Load required toolboxes...
gp.AddToolbox("C:/Dokumenty i ustawienia/UserX/Dane
aplikacji/ESRI/ArcToolbox/My Toolboxes/Toolbox.tbx")
# Process: moj_wlasny...
gp.toolbox = "C:/Dokumenty i ustawienia/UserX/Dane
aplikacji/ESRI/ArcToolbox/My Toolboxes/Toolbox.tbx"
gp.Moj_wlasny()
===================================================
======================================Moj_wlasny===============
from Tkinter import *
# Import system modules
import sys, string, os, arcgisscripting
# Create the Geoprocessor object
gp = arcgisscripting.create()
#definicja klasy
class App:
#w konstruktorze umieszczamy ramkę i przycisk
def __init__(self, master):
ramka=Frame(master)
ramka.master.title("Tytul ramki")
ramka.pack(padx=70, pady=5)
#przycisk z poleceniem
self.przycisk=Button(ramka, text="Polecenie",
font=("arial",20,"bold"),command=self.wykonaj)
self.przycisk.pack()
#
#przycisk zamykający
self.przycisk2=Button(master, text="Koniec", command=root.destroy)
self.przycisk2.pack(side=BOTTOM)
#zdefiniowanie odpowiedzi
def wykonaj(self):
gp.AddMessage(komunikat)
print komunikat
#tworzenie okna głównego
root=Tk()
#tworzenie obiektu
app=App(root)
#pętla powodująca wyświetlanie okienka
root.mainloop()
=========================================================
Re: [jak zdefiniować zmienną globalną]
Author: Jan Kaliszewski
Date: Thu, 25 Nov 2010 04:27
Date: Thu, 25 Nov 2010 04:27
47 lines
2762 bytes
2762 bytes
1. Jest późno (lub jak kto woli wcześnie), a ja za chwilę po x godzin
pracy idę spać, więc mogłem coś przeoczyć -- ale nie widzę żadnego
powiązania między tymi skryptami (modułami?).
2. Jeżeli są to moduły jednego programu (i np. jeden importuje drugi lub
oba są importowane przez jakiś trzeci), to nadal nic magicznie nam się
tutaj nie przeniesie. Tzw. "zmienne globalne" są w Pythonie *globalne
tylko w obrębie danego modułu* (bardziej adekwatnie można by je nazwać
zmiennymi składowymi modułu). Więc jeżeli chcesz się dostać z modułu A do
zmiennej globalnej modułu B, musisz moduł B lub konkretny obiekt siedzący
w zmiennej składowej tego modułu umieścić w zmiennej modułu A --
najczęściej uzyskuje się to za pomocą importu:
===== moduł aaa ======
komunikat = 'tralala'
===== moduł bbb ======
# moduł aaa umieszczamy w zmiennej składowej modułu bbb
import aaa
print(aaa.komunikat)
lub
===== moduł aaa ======
komunikat = 'tralala'
===== moduł bbb ======
# napis 'tralala' umieszczamy w zmiennej składowej modułu bbb
from aaa import komunikat
print(komunikat)
Warto zauważyć, że:
* w Pythonie wszystko jest obiektem, moduły również.
* każdy obiekt można umieścić w zmiennej, a raczej -- mówiąć bardziej
precyzyjnie -- przypiąć mu "etykietkę" (nazwę) w danej przestrzeni nazw;
jeden obiekt może mieć wiele takich "etykietek" (w wielu przestrzeniach
nazw, np. w różnych modułach, klasach, wewnąrz funkcji jako zmienna
lokalna itp.);
* słowo kluczowe global jest potrzebne tylko, jeżeli chcemy w nieglobalnej
przestrzeni nazw (np. wewnątrz definicji funkcji lub klasy) ustawić
wartość zmiennej globalnej.
Pozdr.
*j
Re: [jak zdefiniować zmienną globalną]
Author: Nateysz
Date: Thu, 25 Nov 2010 05:18
Date: Thu, 25 Nov 2010 05:18
28 lines
2012 bytes
2012 bytes
> ===== moduł aaa ====== > komunikat = 'tralala' > > ===== moduł bbb ====== > # moduł aaa umieszczamy w zmiennej składowej modułu bbb > import aaa > print(aaa.komunikat) > > lub > > ===== moduł aaa ====== > komunikat = 'tralala' > > ===== moduł bbb ====== > # napis 'tralala' umieszczamy w zmiennej składowej modułu bbb > from aaa import komunikat > print(komunikat) > Dziękuję za tak szybką odpowiedź...znam ten sposób odwołania - problem w tym, że skrypt, do którego staram się odnieść jest umieszczony wśród toolbox-ów ArcGIS-a... Ja odwołałem się do skryptu tak: gp = arcgisscripting.create() gp.toolbox = "C:/Dokumenty i ustawienia/UserX/Dane aplikacji/ESRI/ArcToolbox/My Toolboxes/Toolbox.tbx" gp.Moj_wlasny()
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads