我对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)
我不明白我是怎么做的,因为唯一可以传递给函数的是事件,但我的程序需要参数。
答案 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。