Prev: constructing and using large lexicon in a program
Next: let optionparse.Optionparser ignore unknown command line switches.
From: Chris Hare on 2 Aug 2010 16:12 Thanks to everyone for answering my question. I think its clear now. I'll just go the "stuff 'em in a module and import that" route. Chris On Aug 2, 2010, at 3:03 PM, MRAB wrote: > Chris Hare wrote: >> I am having a problem getting around this variable namespace thing. >> Consider these code bits >> File a.py >> from Tkinter import * >> import a1 >> def doAgain(): >> x = a1.Net() >> x.show("Again!") >> root = Tk() >> root.title("test") >> f = Frame(root,bg="Yellow") >> l = Button(root,text="window 1",command=doAgain) >> f.grid() >> l.grid() >> a = 5 >> x = a1.Net() >> x.show("window 2") >> if __name__ == "__main__": >> root.mainloop() >> File a1.py >> from Tkinter import * >> class Net: >> def __init__(self): >> self.window = Toplevel() >> def show(self,t): >> self.l = Label(self.window,text=t) >> self.l.grid() >> button = Button(self.window, text="Again") >> button.bind("<Button-1>", self.Again) >> button2 = Button(self.window, text="Dismiss") >> button2.bind("<Button-1>", self.hide) >> button.grid() >> button2.grid() >> def Again(self,event): >> x = Net() >> x.show(a) >> def hide(self,event): >> self.window.destroy() >> When I run a.py, it imports a1.py and click on the Again button, I get the error >> Exception in Tkinter callback >> Traceback (most recent call last): >> File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py", line 1410, in __call__ >> return self.func(*args) >> File "/Volumes/Development/py/a1.py", line 17, in Again >> x.show(a) >> NameError: global name 'a' is not defined >> I believe this is the expected behavior. so my question is this -- how do I tell the code in a1.py about the variable a, which exists in a.py? Do I have to pass it as part of the function call, or what? using >> global a >> in a1.py doesn't change anything. >> since I am using SQLite for the disk database, I was thinking I could keep all the "global" variables in an in memory database and just access them when I need to, but other ideas are welcome. > Why in a database? If you need the modules to share it then you could > put it in a shared module and refer to it there: > > File a.py > --------- > import my_globals > ... > my_globals.a = 5 > > > File a1.py > ---------- > import my_globals > ... > x.show(my_globals.a) > -- > http://mail.python.org/mailman/listinfo/python-list
From: rantingrick on 2 Aug 2010 16:43 On Aug 2, 3:12 pm, Chris Hare <ch...(a)labr.net> wrote: > Thanks to everyone for answering my question. I think its clear now. I'll just go the "stuff 'em in a module and import that" route. Chris, first of all i want you to know that this message is not meant to offend but it may offend you -- hopefully your a rational person and can deal with criticism. This code is horrible. What are you trying to do exactly? Is this purely academic or are you actually using this code for a real purpose? The "Net" class looks like a dialog. Are you wishing to create a dialog? If so, then you would be better off subclassing tkSimpleDialog.Dialog instead of rolling your own. Please explain what you are trying to do from a users perspective so we can properly guide you. Also you should use 4 space indention and never use tabs. This is the accepted way. Although Python does allow freedom i would suggest that coding in a uniformly accepted manner is more productive for the entire community. Google "Python Style Guide" for more info. Thanks
From: Jean-Michel Pichavant on 3 Aug 2010 05:33
rantingrick wrote: > On Aug 2, 3:12 pm, Chris Hare <ch...(a)labr.net> wrote: > > Also you should use 4 space indention and never use tabs. This is the > accepted way. Then ask yourself why tabs are still in python 3. Nice troll by the way. JM |