Ejemplo n.º 1
0
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))