Tkinter将鼠标单击绑定到fram

2024-04-26 05:01:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我肯定漏掉了一些显而易见的东西,我的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)

Tags: 程序infoevent网格bindtkinterfunctionbutton
1条回答
网友
1楼 · 发布于 2024-04-26 05:01:41

当绑定到根窗口时,该绑定将应用于该根窗口中的所有小部件。这就是为什么这两个帧都会触发。这是tkinter的标准行为。

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

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

第三种解决方案涉及更改标签的绑定标记。有关详细示例,请参见以下答案:https://stackoverflow.com/a/32771893/7432

相关问题 更多 >