80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
#!/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("<Return>", 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()
|