O Tkinter gera e invoca eventos virtuais entre diferentes widgets
durante a escrita de um aplicativo GUI simples no tkinter, encontrei um pequeno problema. Digamos que eu tenha um widget de menu personalizado (derivado de tk.Menu) e um widget de tela personalizado (derivado de tk.Canvas).
Gostaria de gerar um evento a partir da função de retorno de chamada do menu e invocá-lo no widget de tela. Eu preciso fazer dessa maneira, porque no futuro eu gostaria de adicionar mais widgets que devem reagir à posição clicada no menu.
Eu tentei fazer dessa maneira:
menu customizado:
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
tela personalizada:
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
Quando clico na posição no menu, o retorno de chamada _handler é chamado corretamente e o evento <> é gerado, mas o retorno de chamada on_event não é chamado. Eu tentei adicionar quando o parâmetro = 'tail', adicione self.update () etc., mas sem nenhum resultado. Alguém sabe como fazer isso?