python Tkinter ListBox回调:传递特定于类的实例回调

时间:2014-02-09 03:16:20

标签: python tkinter

这是奇怪的事情: 比如说,你在一个类中有一个tk.Button(RUN),你可以指定一个像

这样的回调
self.RUN["command"] =  self.run

这是指类中的一个函数,它可以访问所有成员。 实质上,回调会看到一个类实例。

您还可以创建一个tk.ListBox。获得选择的机制涉及事件。 您不能像上面那样传递一个类实例的函数。 回调只能看到Tk中的不透明事件/小部件。

你可以做到

def CurSelect(evt) :
    ...
lb.bind('<<ListboxSelect>>',CurSelect)

但是没有办法传递超过事件。

那么,当你在mainloop中运行多个ListBox时,会发生什么? 如何将事件/窗口小部件映射到拥有事件/窗口小部件的类实例?

当然,你可以制作一些全球地图。 (丑,试过,我讨厌它。) 还有什么更好的吗?

1 个答案:

答案 0 :(得分:4)

您可以尝试使用lambda传递参数。

arguments = []
widget.bind("<>", lambda event, arg=arguments: cur_select(event, arg))

def cur_select(event, arg):
    return

另外,Python函数的命名约定:小写,必要时用下划线分隔,以提高可读性。