41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
from importlib import import_module
|
|||
|
|
import tkinter as tk
|
||
|
|
import os
|
||
|
|
import sys
|
||
|
|
from time import sleep
|
||
|
|
from tkinter import filedialog
|
||
|
|
from abc import ABC, abstractmethod
|
||
|
|
|
||
|
|
class SimulationRunner:
|
||
|
|
def __init__(self, simulation) -> None:
|
||
|
|
self.simulation = simulation()
|
||
|
|
self.simulation.start()
|
||
|
|
while self.simulation.tick():
|
||
|
|
self.simulation.use()
|
||
|
|
self.simulation.stop()
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
if len(sys.argv) == 1:
|
||
|
|
# Create a hidden root window
|
||
|
|
root = tk.Tk()
|
||
|
|
root.withdraw()
|
||
|
|
|
||
|
|
# Open the file chooser dialog
|
||
|
|
file_path = filedialog.askopenfilename()
|
||
|
|
print(f"Selected file: {file_path}")
|
||
|
|
else:
|
||
|
|
file_path = sys.argv[1]
|
||
|
|
|
||
|
|
# Get the python file's directory and filename
|
||
|
|
module_dir, module_file = os.path.split(file_path)
|
||
|
|
# Get the python file's name without any extension
|
||
|
|
module_name, _ = os.path.splitext(module_file)
|
||
|
|
|
||
|
|
# Add the module directory to sys.path so we can import it unqualified
|
||
|
|
sys.path.append(module_dir)
|
||
|
|
|
||
|
|
simulation = import_module(module_name)
|
||
|
|
# Load the simulation module's simulation class, which should be the same
|
||
|
|
# name as the module name.
|
||
|
|
simulationrunner = SimulationRunner(getattr(simulation, module_name))
|