Python Button绑定两个函数并使用绑定发送参数

时间:2011-06-08 23:19:09

标签: python events button tkinter bind

我对python还有点新手,我正在开发一个包含GUI的项目。我经常使用Tkinter和按钮,如果有一种方法可以运行带有绑定的函数,我很好奇,因为我希望在它被按下时会发生一件事,而在它被释放时会发生其他事情。

        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 个答案:

答案 0 :(得分:1)

使用bind的唯一方法是让它调用一个函数。当您使用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