如何在 tkinter 中发出事件?
How to emit events in tkinter?
我有一个用 python3 和 tkinter 模块编写的简单应用程序。我想编写我的自定义小部件并需要发送我的自定义事件。
为什么下面的示例代码不起作用?
#!/usr/bin/env python3
from tkinter import *
class MyWidget(Listbox):
def __init__(self, master, *args, **kwargs):
super().__init__(master, *args, **kwargs)
# ===================
# error: _tkinter.TclError: only one event specification allowed
self.bind('<<ListboxSelect>>', lambda e: self.event_generate('MyEvent'))
# ===================
class App(Tk):
def __init__(self):
super().__init__()
w = MyWidget(self)
w.bind('MyEvent', lambda e: print('It\'s working'))
w.pack()
w.insert(END, 'ddddddd')
if __name__ == '__main__':
app = App()
app.mainloop()
虚拟事件需要被 <<
和 >>
包围。只需将 'MyEvent'
替换为 '<<MyEvent>>'
,您的自定义事件就可以工作了。
我有一个用 python3 和 tkinter 模块编写的简单应用程序。我想编写我的自定义小部件并需要发送我的自定义事件。
为什么下面的示例代码不起作用?
#!/usr/bin/env python3
from tkinter import *
class MyWidget(Listbox):
def __init__(self, master, *args, **kwargs):
super().__init__(master, *args, **kwargs)
# ===================
# error: _tkinter.TclError: only one event specification allowed
self.bind('<<ListboxSelect>>', lambda e: self.event_generate('MyEvent'))
# ===================
class App(Tk):
def __init__(self):
super().__init__()
w = MyWidget(self)
w.bind('MyEvent', lambda e: print('It\'s working'))
w.pack()
w.insert(END, 'ddddddd')
if __name__ == '__main__':
app = App()
app.mainloop()
虚拟事件需要被 <<
和 >>
包围。只需将 'MyEvent'
替换为 '<<MyEvent>>'
,您的自定义事件就可以工作了。