Tkinter 将鼠标点击绑定到框架

Bob*_*Bob 3 python tkinter

我一定遗漏了一些明显的东西,我的 Tkinter 程序中有两个框架,每个框架在网格布局中都有一堆标签。我想将鼠标点击绑定到其中一个而不是另一个。我目前使用

root.bind("<Button-1>", mouse_function)
Run Code Online (Sandbox Code Playgroud)

但如果我点击另一个框架,这也会触发。我假设使用

schedule_frame.bind("<Button-1>", mouse_function)
Run Code Online (Sandbox Code Playgroud)

会工作,但后来我在任何地方都没有得到回应。

我调用的函数是:

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)
Run Code Online (Sandbox Code Playgroud)

Bry*_*ley 6

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

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

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

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