run.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from sccd.statechart.parser.xml import parse_f, statechart_parser_rules
  2. from sccd.cd.cd import *
  3. from sccd.controller.eventloop import *
  4. import queue
  5. MODEL_DELTA = duration(100, Microsecond)
  6. def main():
  7. # Load statechart
  8. g = Globals()
  9. sc_rules = statechart_parser_rules(g, "statechart_digitalwatch.xml")
  10. statechart = parse_f("statechart_digitalwatch.xml", rules=sc_rules)
  11. cd = SingleInstanceCD(g, statechart)
  12. g.set_delta(MODEL_DELTA)
  13. eventloop = None
  14. def on_gui_event(event: str):
  15. eventloop.add_input(InputEvent(name=event, port="in", params=[], time_offset=duration(0)))
  16. eventloop.interrupt()
  17. import tkinter
  18. from tkinter.constants import NO
  19. from DigitalWatchGUI import DigitalWatchGUI
  20. tk = tkinter.Tk()
  21. tk.withdraw()
  22. topLevel = tkinter.Toplevel(tk)
  23. topLevel.resizable(width=NO, height=NO)
  24. topLevel.title("DWatch")
  25. gui = DigitalWatchGUI(topLevel)
  26. gui.controller.send_event = on_gui_event
  27. def on_big_step(output):
  28. for e in output:
  29. # print("out:", e.name)
  30. # the output event names happen to be functions on our GUI controller:
  31. method = getattr(gui.controller, e.name)
  32. method()
  33. eventloop = EventLoop(cd, TkInterImplementation(tk), on_big_step)
  34. eventloop.start()
  35. tk.mainloop()
  36. if __name__ == '__main__':
  37. main()