🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
3 messages
3 total messages Started by Nateysz Wed, 24 Nov 2010 22:31
[jak zdefiniować zmienną globalną]
#27819
Author: Nateysz
Date: Wed, 24 Nov 2010 22:31
65 lines
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ą]
#27820
Author: Jan Kaliszewski
Date: Thu, 25 Nov 2010 04:27
47 lines
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ą]
#27821
Author: Nateysz
Date: Thu, 25 Nov 2010 05:18
28 lines
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