我一直在尝试将鼠标点击绑定到某个帧中的网格,this question之后我创建了一个新类并将事件绑定到该帧,这是有效的。但是鼠标事件的功能需要一个在MainApp类中生成的变量,我无法让它正常工作。根据安排,我无法获得要在函数中使用的widgets
变量,或者函数/类的顺序是错误的,因此程序将找不到某些东西,因为它过早被引用。< / p>
所以我的主要问题是如何使功能正常工作,我认为这主要涉及我在哪里放这个东西?作为Schedule_Label
类中的函数?作为MainApp
的函数?一个松散的功能?将所有事件处理程序放在一个单独的Python文件中并导入它会更聪明吗?
排除一些代码,这就是正在发生的事情:
class Schedule_Label(tk.Label):
def __init__(self, parent, *args, **kwargs):
tk.Label.__init__(self, parent, *args, **kwargs)
self.bind("<Button-1>", mouse_1)
...
class Schedule, this class uses Schedule_Label
class MainApp(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
#class schedule is used here
...
schedule_widgets = self.schedule.New(date, stafflist)
...
def mouse_1(event):
r = event.widget.grid_info()['row']
c = event.widget.grid_info()['column']
schedule_widgets[(r,c)].configure(state="active")
if __name__ == "__main__":
root = tk.Tk()
app = MainApp(root)
app.pack()
root.mainloop()
答案 0 :(得分:0)
您从名为[{1}}的名称空间schedule_widgets
拨打mouse_1
,以便能够像使用MainApp
关键字那样使用它。
global
还有另外一种方法,但schedule_widgets = None#-------------------------------------------------------- new ---
class Schedule_Label(tk.Label):
def __init__(self, parent, *args, **kwargs):
tk.Label.__init__(self, parent, *args, **kwargs)
self.bind("<Button-1>", mouse_1)
...
class Schedule, this class uses Schedule_Label
class MainApp(tk.Frame):
def __init__(self, parent, *args, **kwargs):
global schedule_widgets #----------------------------------------------- new ---
tk.Frame.__init__(self, parent, *args, **kwargs)
#class schedule is used here
...
schedule_widgets = self.schedule.New(date, stafflist)
...
def mouse_1(event):
global schedule_widgets #--------------------------------------------------- new ---
r = event.widget.grid_info()['row']
c = event.widget.grid_info()['column']
schedule_widgets[(r,c)].configure(state="active")
if __name__ == "__main__":
root = tk.Tk()
app = MainApp(root)
app.pack()
root.mainloop()
应该是schedule_widgets
的属性,当您实例化MainApp
时,您应该提供父参考,以便schedule_Label
可以使用父参考
mouse_1
schedule_widgets