Tkinter genera e invoca eventos virtuales entre diferentes widgets

Durante la escritura de una aplicación gui simple en tkinter, encontré un pequeño problema. Digamos que tengo un widget de menú personalizado (derivado de tk.Menu) y un widget de lienzo personalizado (derivado de tk.Canvas).

Me gustaría generar un evento desde la función de devolución de llamada del menú e invocarlo en el widget de lienzo. Necesito hacerlo de esa manera porque en el futuro me gustaría agregar más widgets que deberían reaccionar a la posición cliqueada en el menú.

Traté de hacerlo de esa manera:

menú personalizado:

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

lienzo personalizado:

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

Cuando hago clic en la posición en el menú, la devolución de llamada _handler se invoca correctamente y se genera el evento <>, pero no se invoca la devolución de llamada on_event. Intenté agregar el parámetro when = 'tail', agregar self.update (), etc., pero sin ningún resultado. Alguien sabe como hacerlo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta