import sys import pysmu from PyQt5.QtWidgets import QApplication from PyQt5.QtCore import pyqtSignal, QObject from GUI import MainWindow from DeviceController import DeviceController class ControllerSignals(QObject): started = pyqtSignal(str) # serial stopped = pyqtSignal(str) error = pyqtSignal(str, str) # serial, msg signals = ControllerSignals() def main(): # 1) Geräte einsammeln (pysmu nur hier benutzen) sess = pysmu.Session() sess.add_all() controllers = {dev.serial: DeviceController(sess, dev) for dev in sess.devices} serials = list(controllers.keys()) print("Gefundene Geräte:", serials) # Optional: Modi setzen for serial in serials: c = controllers[serial] c.set_mode("A", pysmu.Mode.SIMV) # CH A z. B. c.set_mode("B", pysmu.Mode.HI_Z) # CH B z. B. # 2) GUI erstellen app = QApplication(sys.argv) win = MainWindow() # Kleine Helfer, damit die ListItem-Buttons nur Controller.start/stop aufrufen def make_on_start(ctrl, widget): def _start(checked=False): try: ctrl.start() # startet Worker-Threads, blockiert nicht widget.set_running(True) except Exception as e: print(f"Fehler beim Start {ctrl.dev.serial}: {e}") return _start def make_on_stop(ctrl, widget): def _stop(checked=False): try: ctrl.stop() widget.set_running(False) except Exception as e: print(f"Fehler beim Stop {ctrl.dev.serial}: {e}") return _stop # 3) Liste befüllen (auf der INSTANZ, nicht auf der Klasse!) for i, serial in enumerate(serials): ctrl = controllers[serial] placeholder = lambda checked=False: None widget = win.add_list_item( text=serial, index=i, on_start = make_on_start(ctrl, placeholder), # placeholder siehe unten on_stop = make_on_stop(ctrl, placeholder), ) widget.btn_start.clicked.disconnect() widget.btn_stop.clicked.disconnect() widget.btn_start.clicked.connect(make_on_start(ctrl, widget)) widget.btn_stop.clicked.connect(make_on_stop(ctrl, widget)) # 4) Start win.show() sys.exit(app.exec_()) if __name__ == "__main__": main() # # Beispiel: Gerät 1 starten, Gerät 2 später starten/stoppen # c1 = controllers[serials[0]] # c1.set_mode(0, MODE.HI_Z) # CH A Hi-Z # c1.set_mode(1, MODE.HI_Z) # CH B Hi-Z # c1.start() # time.sleep(2.0) # if len(serials) > 1: # c2 = controllers[serials[1]] # c2.set_mode(0, MODE.HI_Z) # c2.set_mode(1, MODE.HI_Z) # c2.start() # time.sleep(3.0) # c2.stop() # nur Gerät 2 stoppen # # sauber beenden (Strg+C-Handling etc. weglassen der Kürze halber) # for c in controllers.values(): # c.stop() # for c in controllers.values(): # c.shutdown()