| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- import tkinter as tk
- import examples.BouncingBalls.PyDEVS.target as target
- from sccd.runtime.libs.ui_v2 import UI
- from sccd.runtime.DEVS_loop import DEVSSimulator
- import time
- begin_time = time.time()
- class OutputListener:
- def __init__(self, model, log_file):
- self.model = model
- self.log_file = log_file
- # Clear the log file when the listener is initialized
- with open(self.log_file, 'w') as file:
- file.write('') # This will create a new empty file or clear the existing file
-
- def add(self, events):
- with open(self.log_file, 'a') as file:
- for event in events:
- elapsed_time = time.time() - begin_time
- file.write(f'{elapsed_time:.3f} {event}\n')
- # IMPORTANT: This is here because we add our own inputs but tkinter will not close properly because of this
- #if event.name == "destroy_all":
- #self.tk.destroy()
- if __name__ == '__main__':
- model = target.Controller(name="controller")
- refs = {"ui": model.in_ui, "field_ui": model.atomic1.field_ui, "button_ui": model.atomic2.button_ui, "ball_ui": model.atomic3.ball_ui}
- tkroot = tk.Tk()
- tkroot.withdraw()
- sim = DEVSSimulator(model, refs)
- sim.setRealTimeInputFile("./examples/BouncingBalls/input_trace.txt")
-
- sim.setRealTimePlatformTk(tkroot)
- listener = OutputListener(model, "./examples/BouncingBalls/PyDEVS/output.txt")
- sim.setListenPorts(model.out_ui, listener.add)
- sim.simulate()
- tkroot.mainloop()
|