Python 3 Tkinter 绑定事件识别哪个元素



我有两个画布(元素(:

self.canvas1
self.canvas2

我希望他们在鼠标悬停在画布上时执行something()

所以我使用bind('<Enter>')连接它:

self.canvas1.bind('<Enter>', something)
self.canvas2.bind('<Enter>', something)

something()中,它将尝试将画布配置为红色背景色,以便:

def something(event):
canvas.configure(background='red')

棘手的部分是,函数something如何知道它应该将其背景颜色更改为哪个画布?

事件对象具有widget属性,该属性引用生成事件的小组件。你可以使用它。

event.widget.configure(background="red")

如果出于某种原因,您不想这样做,您可以创建一个匿名函数来保持小部件变量的闭包,然后您可以将其作为参数直接传递给您的函数。

self.canvas1.bind('<Enter>', lambda event: something(self.canvas1))
#or possibly*
self.canvas1.bind('<Enter>', lambda event, canvas1=self.canvas1: something(canvas1))

在这种情况下,您必须将something函数的参数更改为def something(widget):

(*仅当您在循环中绑定时才需要canvas1=self.canvas1,例如在 Tkinter 中与 lambda 循环分配按钮命令(

最新更新