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?