run.py 1.3 KB

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