Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- try:
- import Tkinter as tk
- except ImportError: # Fix fuer Python3
- import tkinter as tk
- # Event-Handler
- class Event(object):
- def __init__(self):
- self.listener = list()
- def add(self, listener):
- self.listener.append(listener)
- def notify(self):
- for listener in self.listener:
- listener()
- class Model(object):
- def __init__(self):
- # Stelle Events bereit
- self.spam_event = Event()
- self.eggs_event = Event()
- def spam(self):
- print("spam im Modell aufgerufen")
- print("(und unglaublich wichtige Berechnungen gemacht)")
- print("---")
- pass # Tu sonst noch irgendwas Wichtiges...
- # Event abfeuern
- self.spam_event.notify()
- def eggs(self):
- print("eggs aufgerufen")
- print("(und unglaublich wichtige Daten bearbeitet)")
- print("---")
- # Event abfeuern
- pass # Tu sonst noch irgendwas Wichtiges...
- self.eggs_event.notify()
- class Viewer(object):
- def __init__(self):
- # Stelle Events bereit
- self.user_clicked_spam = Event()
- self.user_clicked_eggs = Event()
- # Zeichne "nur" die GUI
- self.root = tk.Tk()
- self.root.geometry("300x200")
- # Binde Buttons an die Events (siehe "command=")
- self.spambutton = tk.Button(self.root, text="spam",
- command=self.user_clicked_spam.notify)
- self.eggbutton = tk.Button(self.root, text="eggs",
- command=self.user_clicked_eggs.notify)
- self.spambutton.pack(expand=True, fill=tk.BOTH)
- self.eggbutton.pack(expand=True, fill=tk.BOTH)
- # Statusbar, einfach so^^
- self.statusbar = tk.Label(self.root)
- self.statusbar.pack(expand=True, fill=tk.BOTH)
- def run(self):
- self.root.mainloop()
- def change_statusbar(self, text):
- self.statusbar.configure(text=text)
- class Controller(object):
- def __init__(self, viewer):
- self.viewer = viewer
- # Model verwalten
- self.model = Model()
- # Events vom Model schnappen und an eigene Methoden koppeln.
- self.model.spam_event.add(self.get_spam)
- self.model.eggs_event.add(self.get_eggs)
- # Events vom Viewer schnappen und an eigene Methoden koppeln.
- self.viewer.user_clicked_spam.add(self.spam)
- self.viewer.user_clicked_eggs.add(self.eggs)
- def spam(self):
- print("spam im Controller aufgerufen")
- print("---")
- self.model.spam()
- def eggs(self):
- print("eggs im Controller aufgerufen")
- print("---")
- self.model.eggs()
- def get_spam(self):
- # Ich bekam Anweisung vom Modell, jetzt habe ich als
- # Controller die Erlaubnis, das dem Viewer mitzuteilen
- self.viewer.change_statusbar("Modell sagt: spam")
- def get_eggs(self):
- # Ich bekam Anweisung vom Modell, jetzt habe ich als
- # Controller die Erlaubnis, das dem Viewer mitzuteilen
- self.viewer.change_statusbar("Modell sagt: eggs")
- def run(self):
- self.viewer.run()
- if __name__ == "__main__":
- viewer = Viewer()
- controller = Controller(viewer)
- controller.run()
Advertisement
Add Comment
Please, Sign In to add comment