Guest User

Untitled

a guest
Dec 11th, 2014
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.31 KB | None | 0 0
  1. try:
  2.     import Tkinter as tk
  3. except ImportError:  # Fix fuer Python3
  4.     import tkinter as tk
  5.  
  6.  
  7. # Event-Handler
  8. class Event(object):
  9.     def __init__(self):
  10.         self.listener = list()
  11.  
  12.     def add(self, listener):
  13.         self.listener.append(listener)
  14.  
  15.     def notify(self):
  16.         for listener in self.listener:
  17.             listener()
  18.  
  19.  
  20. class Model(object):
  21.     def __init__(self):
  22.         # Stelle Events bereit
  23.         self.spam_event = Event()
  24.         self.eggs_event = Event()
  25.  
  26.     def spam(self):
  27.         print("spam im Modell aufgerufen")
  28.         print("(und unglaublich wichtige Berechnungen gemacht)")
  29.         print("---")
  30.         pass  # Tu sonst noch irgendwas Wichtiges...
  31.         # Event abfeuern
  32.         self.spam_event.notify()
  33.  
  34.     def eggs(self):
  35.         print("eggs aufgerufen")
  36.         print("(und unglaublich wichtige Daten bearbeitet)")
  37.         print("---")
  38.         # Event abfeuern
  39.         pass  # Tu sonst noch irgendwas Wichtiges...
  40.         self.eggs_event.notify()
  41.  
  42.  
  43. class Viewer(object):
  44.     def __init__(self):
  45.         # Stelle Events bereit
  46.         self.user_clicked_spam = Event()
  47.         self.user_clicked_eggs = Event()
  48.  
  49.         # Zeichne "nur" die GUI
  50.         self.root = tk.Tk()
  51.         self.root.geometry("300x200")
  52.  
  53.         # Binde Buttons an die Events (siehe "command=")
  54.         self.spambutton = tk.Button(self.root, text="spam",
  55.                                     command=self.user_clicked_spam.notify)
  56.         self.eggbutton = tk.Button(self.root, text="eggs",
  57.                                    command=self.user_clicked_eggs.notify)
  58.         self.spambutton.pack(expand=True, fill=tk.BOTH)
  59.         self.eggbutton.pack(expand=True, fill=tk.BOTH)
  60.  
  61.         # Statusbar, einfach so^^
  62.         self.statusbar = tk.Label(self.root)
  63.         self.statusbar.pack(expand=True, fill=tk.BOTH)
  64.  
  65.     def run(self):
  66.         self.root.mainloop()
  67.  
  68.     def change_statusbar(self, text):
  69.         self.statusbar.configure(text=text)
  70.  
  71.  
  72. class Controller(object):
  73.     def __init__(self, viewer):
  74.         self.viewer = viewer
  75.  
  76.         # Model verwalten
  77.         self.model = Model()
  78.  
  79.         # Events vom Model schnappen und an eigene Methoden koppeln.
  80.         self.model.spam_event.add(self.get_spam)
  81.         self.model.eggs_event.add(self.get_eggs)
  82.  
  83.         # Events vom Viewer schnappen und an eigene Methoden koppeln.
  84.         self.viewer.user_clicked_spam.add(self.spam)
  85.         self.viewer.user_clicked_eggs.add(self.eggs)
  86.  
  87.     def spam(self):
  88.         print("spam im Controller aufgerufen")
  89.         print("---")
  90.         self.model.spam()
  91.  
  92.     def eggs(self):
  93.         print("eggs im Controller aufgerufen")
  94.         print("---")
  95.         self.model.eggs()
  96.  
  97.     def get_spam(self):
  98.         #  Ich bekam Anweisung vom Modell, jetzt habe ich als
  99.         #  Controller die Erlaubnis, das dem Viewer mitzuteilen
  100.         self.viewer.change_statusbar("Modell sagt: spam")
  101.  
  102.     def get_eggs(self):
  103.         #  Ich bekam Anweisung vom Modell, jetzt habe ich als
  104.         #  Controller die Erlaubnis, das dem Viewer mitzuteilen
  105.         self.viewer.change_statusbar("Modell sagt: eggs")
  106.  
  107.     def run(self):
  108.         self.viewer.run()
  109.  
  110.  
  111. if __name__ == "__main__":
  112.     viewer = Viewer()
  113.     controller = Controller(viewer)
  114.     controller.run()
Advertisement
Add Comment
Please, Sign In to add comment