from importlib import import_module import tkinter as tk import os import sys from random import choice 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() uses = list(self.simulation.get_uses().keys()) while self.simulation.tick() and self.simulation.use(choice(uses)): pass 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))