Tkinter将鼠标点击绑定到框架

时间:2015-11-16 18:18:33

标签: python tkinter

我必须遗漏一些明显的东西,我的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 个答案:

答案 0 :(得分:3)

绑定到根窗口时,该绑定适用于该根窗口中的所有窗口小部件。这就是它触发任何一帧的原因。这是tkinter的标准行为。

当您将绑定移动到框架时,它会停止工作,因为框架从未看到过该事件。当您单击标签时,它是看到绑定的标签,而不是框架(除非您单击标签之间的空格)

至少有三种方法可以解决这个问题。一个是你可以将绑定放在标签而不是框架上。另一种方法是在根窗口上保持绑定,但在函数内检查以查看窗口小部件是否是该帧的子节点。

第三种解决方案涉及更改标签的绑定标签。有关深入示例,请参阅此答案:https://stackoverflow.com/a/32771893/7432