Tkinter генерирует и вызывает виртуальное событие между различными виджетами
во время написания некоторого простого графического приложения в tkinter я столкнулся с небольшой проблемой. Допустим, у меня есть пользовательский виджет меню (производный от tk.Menu) и пользовательский виджет холста (производный от tk.Canvas).
Я хотел бы создать событие из функции обратного вызова меню и вызвать его в виджете холста. Мне нужно сделать это таким образом, потому что в будущем я хотел бы добавить больше виджетов, которые должны реагировать на нажатие в меню.
Я пытался сделать это так:
Пользовательское меню:
class MainMenu(tk.Menu):
def __init__(self, parent):
tk.Menu.__init__(self, parent)
self.add_comand(label='foo', self._handler)
return
def _handler(self, *args):
print('handling menu')
self.event_generate('<<abc>>')
return
пользовательский холст:
class CustomCanvas(tk.Canvas):
def __init__(self, parent, name=''):
tk.Canvas.__init__(self, parent)
self.bind('<<abc>>', self.on_event)
return
def on_event(self, event):
print(event)
return
Когда я щелкаю позицию в меню, обратный вызов _handler вызывается правильно и генерируется событие <>, но обратный вызов on_event не вызывается. Я пытался добавить параметр when = 'tail', добавить self.update () и т. Д., Но безрезультатно. Кто-нибудь знает, как это сделать?