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 () и т. Д., Но безрезультатно. Кто-нибудь знает, как это сделать?

Ответы на вопрос(3)

Ваш ответ на вопрос