2011-06-08 41 views
1

我对Python还是有点新,并且正在处理包括GUI的项目。我和Tkinter以及按钮一起使用了很多,并且很好奇是否有一种方法可以使用绑定来运行函数,因为我想在按下按钮时发生一件事,并在发布时发生其他事情。Python按钮绑定两个函数并使用绑定发送参数

 s = str(x+1) + ":" + str(y+1) 
     img = ImageTk.PhotoImage(Image.open('button.png')) 
     b = Tkinter.Button(field_hid, image=img, borderwidth=0, highlightthickness=0, background='grey') 
     b.bind("<ButtonPress-1>", lambda s=s, button=b: location_down(event,s,button)) 
     b.bind("<ButtonRelease-1>", lambda s=s, button=b: location_up(event,s,button)) 
     b.img = img 
     b.pack() 
     b.grid(row=x, column=y) 

我不明白我是怎么做到这一点,因为这可以传递给函数的唯一事情是事件,但我的程序需要的参数。

回答

1

使用绑定的唯一方法是让它调用一个函数。当您使用lambda时,您只是创建一个匿名函数。您可以轻松地做:当你想传递额外的参数给函数

b.bind("<ButtonPress-1>", self.SomeOtherFunction) 

lambda是非常有用的。与使用command选项不同,使用绑定时,您会得到一个包含大量有用信息的事件对象,因此您可能不需要传递任何其他信息。

例如,你可以这样做:

def OnPress(event): 
    print "widget %s was pressed" % event.widget 
def OnRelease(event): 
    print "widget %s was released" % event.widget 

b = Button(...) 
b.bind("<ButtonPress-1>", OnPress) 
b.bind("<ButtonRelease-1>", OnRelease) 

对于一个很好的介绍,结合上看到effbot.org Events and Bindings

+0

谢谢,lambdas非常有趣 – 2016-08-30 22:48:06