#!/usr/bin/env python3 from tkinter import * from tkinter import ttk # -------------------------- # Model # -------------------------- class TLight: def __init__(self): self.colors = {0: "red", 1: "yellow", 2: "green", 3: "yellow"} self.status = 0 def switch(self): if self.status < max(self.colors.keys()): self.status += 1 else: self.status = 0 def print_color(self): print(self.colors[self.status]) def get_color(self): return self.colors[self.status] # -------------------------- # Controller # -------------------------- class TLightController: def __init__(self, app): self.app = app self.tlight = TLight() def change_light(self, event=None): self.tlight.switch() self.update_view() def update_view(self): color = self.tlight.get_color() self.app.change_light_display(color) # -------------------------- # View / Main Application # -------------------------- class TLightApp(Tk): def __init__(self): super().__init__() self.controller = TLightController(self) self.create_widgets() self.create_light() self.bind_events() def create_widgets(self): mainframe = ttk.Frame(self, padding="3 3 3 3") mainframe.grid(column=0, row=0, sticky=N+W+S+E) self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) button_switch = ttk.Button(mainframe, text="Schalte um", command=self.controller.change_light) button_switch.grid(column=0, row=0, sticky=W) light_canvas = Canvas(mainframe, width=50, height=50, background="black") light_canvas.grid(column=1, row=0, sticky=W) self.lc = light_canvas def create_light(self, color="red"): self.light = self.lc.create_oval(10,10,40,40,fill=color) def bind_events(self): self.bind("", self.controller.change_light) def change_light_display(self, color): self.lc.itemconfigure(self.light, fill=color) # -------------------------- # Execution # -------------------------- if __name__ == "__main__": app = TLightApp() app.mainloop()