【问题标题】:Python 3 Tkinter bind event recognize which elementPython 3 Tkinter 绑定事件识别哪个元素
【发布时间】:2018-10-22 14:38:57
【问题描述】:

我有两个画布(元素):

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 函数如何知道它应该将其背景颜色更改为哪个画布?

【问题讨论】:

    标签: python tkinter hover bind


    【解决方案1】:

    事件对象有一个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 assign button command in loop with lambda)

    【讨论】:

    • 第一个解决方案event.widget.configure(background="red") 好多了,非常适合我。我只需要等待接受答案冷却
    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2010-11-15
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2018-04-28
    相关资源
    最近更新 更多