import sys import pysmu from PyQt5.QtWidgets import QApplication from PyQt5.QtCore import pyqtSignal, QObject from GUI import MainWindow from DeviceController import DeviceController from functools import partial 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 on_start(ctrl, widget): ctrl.start() widget.set_running(True) def on_stop(ctrl, widget): ctrl.stop() widget.set_running(False) # 3) Liste befüllen (auf der INSTANZ, nicht auf der Klasse!) for i, serial in enumerate(serials): ctrl = controllers[serial] w = win.add_list_item(serial, i) # WICHTIG: die Lambda fängt 'checked' ab (erster Parameter), wir ignorieren ihn. w.btn_start.clicked.connect(lambda checked=False, c=ctrl, ww=w: on_start(c, ww)) w.btn_stop.clicked.connect (lambda checked=False, c=ctrl, ww=w: on_stop(c, ww)) # 4) Start win.show() sys.exit(app.exec_()) if __name__ == "__main__": main()