class Application(tk.Frame): def __init__(self, master=None, queue=None): super().__init__(master) self._create_widgets(master) self._mq = Broker(event_generate=master.event_generate) master.bind('<<SENT_EVENT>>', self.handle_event) def _create_widgets(self, master): self.mainframe = tk.Frame(master) self.mainframe.grid(row=1, column=1, sticky='NESW') b = tk.Button(self.mainframe, text="a button") b.configure(command=self.button_command) # b.configure(command=lambda: self.button_command(b)) b.grid(row=1, column=1, sticky='NEW') self.red_led = Indicator(master, LED_RED_OFF_IMG, LED_RED_ON_IMG, 100) self.red_led.grid(row=2, column=1, sticky='SE') self.red_blinker = Blinker(self.after, indfunc=self.red_led.flash) self.green_led = Indicator(master, LED_GREEN_OFF_IMG, LED_GREEN_ON_IMG, 250) self.green_led.grid(row=2, column=2, sticky='SW') self.info_widget = tk.Label(master, text="<empty>") self.info_widget.grid(row=3, column=1, sticky='SEW') def button_command(self): self.red_blinker.action() self.green_led.blink() x = Eventer(after=self.after, indicate_func=self._mq.write) x.action() def handle_event(self, e): print(str(self._mq)) try: name, data = self._mq.read() except IndexError: return if name == 'Info': self.info_widget.config(text=data) elif name == 'Alert': showerror('Error', "{!s}".format(data))