On Oct 2, 2007, at 5:20 PM, TheFlyingDutchman wrote: > Does anyone know how the variables label and scale are recognized > without a global statement or parameter, in the function resize() in > this code: > > > > #!/usr/bin/env python > > from Tkinter import * > > def resize(ev=None): > label.config(font='Helvetica -%d bold' % \ > scale.get()) > > > top = Tk() > top.geometry('250x150') > > label = Label(top, text='Hello World!', > font='Helvetica -12 bold') > label.pack(fill=Y, expand=1) > > scale = Scale(top, from_=10, to=40, > orient=HORIZONTAL, command=resize) > scale.set(12) > scale.pack(fill=X, expand=1) > > quit = Button(top, text='QUIT', > command=top.quit, activeforeground='white', > activebackground='red') > quit.pack() > > mainloop()
It's tricky. Basically, you only need to use the global statement if you intend binding operations (assignments) on the variable name and want those to affect the global variable. If you perform binding operations without the global statement it is assumed that you are defining a local variable. class foo(object): def foofoo(self): print 7 def showfoo(): f.foofoo() f = foo() showfoo() print f outputs: 7 <__main__.foo object at ... > with the same class: def showfoo(): global f f.foofoo() f = 6 f = foo() showfoo() f outputs: 7 6 with the same class again: deff showfoo(): f.foofoo() f = 6 f = foo() showfoo() outputs: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in showfoo UnboundLocalError: local variable 'f' referenced before assignment The difference in the last one is that when showfoo() is compiled the assignment to f without any global statement makes f a local variable and a method is called on it before it is bound which results in the exception. Erik Jones Software Developer | Emma® [EMAIL PROTECTED] 800.595.4401 or 615.292.5888 615.292.0777 (fax) Emma helps organizations everywhere communicate & market in style. Visit us online at http://www.myemma.com -- http://mail.python.org/mailman/listinfo/python-list