On Wed, 15 Jun 2005 14:31:55 -0500
Phillip Hart <[EMAIL PROTECTED]> wrote:


Hi Phillip,

> #!usr/bin/python
> 
> from Tkinter import *
> 
> def location(x,y):
> print "I am in row ",x," and column ",y
> 
> 
> root=Tk()
> root.geometry('300x300')
> can=Canvas(root,width=250, height=250)
> 
> bimage=PhotoImage(file='sq1.gif')
> 
> b1=Button(can,bg="black",image=bimage,command=location(0,0)).grid(row=0,column=0)

That's an error which frequently happens to Tkinter beginners.
When you assign the button's command like this the command is executed 
immediately
after button creation, the correct usage is:

    b1 = Button(can, command=location)

without the parentheses; however if you need to pass arguments to the callback,
you can use a lambda expression like this:

    b1 = Button(can, command = lambda x=0, y=0 : location(x, y))

Another problem in this line that doesn't matter here, but might cause 
confusion later on
is the use of grid() ; note that grid() returns None, so actually you set your 
variable
b1 to None which is probably not what you intended; if you need to keep a 
reference to
the Button object you need to split the above into two statements:

    b1 = Button(can, <opts>)
    b1.grid()

If you don't need a reference you can simply do:

    Button(can,<opts>).grid(row=0,column=0)

without creating a (quite useless) variable.

I hope this helps

Michael

_______________________________________________
Tutor maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to