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

时间:2018-10-22 14:38:58

标签: python tkinter hover bind

我有两个画布(元素):

@MessageDriven
@Transactional
public class JMSConsumerService implements MessageListener {

     @Inject @TransService
     private ITransactionService transactionService;

     @Override
     public void onMessage(Message message){
          transactionService.process();
     }

}

当鼠标悬停在画布上时,我希望他们执行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') 如何知道它应该将背景色更改为哪个画布?

1 个答案:

答案 0 :(得分:3)

事件对象具有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