2015-11-16 67 views
1

我必须缺少一些明显的东西,我的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) 

回答

2

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

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

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

第三种解决方案涉及更改标签的绑定标签。对于一个深入的例子看到这个答案:https://stackoverflow.com/a/32771893/7432

+0

谢谢,这部分工作,但现在我不能得到正确的功能,我提出了一个新的问题,https://stackoverflow.com/questions/33780668 /在那里对放,事件处理程序和通变量到它。 – Bob