run.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from sccd.realtime.eventloop import *
  2. from sccd.realtime.tkinter import TkInterImplementation
  3. from sccd.cd.parser.xml import *
  4. def main():
  5. # Load statechart
  6. cd = load_cd("model_digitalwatch.xml")
  7. import tkinter
  8. from tkinter.constants import NO
  9. from DigitalWatchGUI import DigitalWatchGUI
  10. tk = tkinter.Tk()
  11. tk.withdraw()
  12. topLevel = tkinter.Toplevel(tk)
  13. topLevel.resizable(width=NO, height=NO)
  14. topLevel.title("DWatch")
  15. gui = DigitalWatchGUI(topLevel)
  16. def on_gui_event(event: str):
  17. controller.add_input(
  18. timestamp=eventloop.now(), event_name=event, port="in", params=[])
  19. eventloop.interrupt()
  20. gui.controller.send_event = on_gui_event
  21. def on_output(event: OutputEvent):
  22. if event.port == "out":
  23. # print("out:", e.name)
  24. # the output event names happen to be functions on our GUI controller:
  25. method = getattr(gui.controller, event.name)
  26. method()
  27. controller = Controller(cd, on_output)
  28. eventloop = EventLoop(controller, TkInterImplementation(tk))
  29. eventloop.start()
  30. tk.mainloop()
  31. if __name__ == '__main__':
  32. main()