Tkinter绑定鼠标点击到框架上

4

我可能遗漏了一些明显的东西,在我的Tkinter程序中有两个框架,每个框架中都有一堆标签以网格布局方式排列。我想绑定鼠标单击事件到其中一个框架,但不是另一个框架。我目前使用的是

root.bind("<Button-1>", mouse_function)

但是当我点击其他框架时,它也会被触发。我认为使用以下代码可以解决这个问题:
schedule_frame.bind("<Button-1>", mouse_function)

使用该方法可以工作,但是我在任何地方都没有得到响应。

我要调用的函数是:

def mouse_function(event):
    y = event.widget.grid_info()['row']
    x = event.widget.grid_info()['column'] 
    widgets[(y, x)].configure(state="active")
    shiftSelection(y,x)

1个回答

9
当您绑定到根窗口时,该绑定适用于该根窗口中的所有小部件。这就是为什么它会触发任何一个框架的原因。这是 tkinter 的标准行为。
当您将绑定移动到框架时,它停止工作,因为框架从未看到该事件。当您单击标签时,看到绑定的是标签,而不是框架(除非您单击标签之间的空白处)。
解决此问题的至少三种方法。一种是将绑定放在标签上而不是框架上。另一种方法是将绑定保留在根窗口中,但在函数内部检查小部件是否是该框架的子级。
第三种解决方案涉及更改标签的绑定标记。有关详细示例,请参见此答案:https://dev59.com/n4_ea4cB1Zd3GeqPOnYe#32771893

谢谢,这部分已经起作用了,但现在我无法使订单正常运行,我为此提出了一个新问题 https://stackoverflow.com/questions/33780668/where-to-put-event-handlers-and-pass-variables-to-it。 - Bob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接