This commit is contained in:
Vincent Hanewinkel 2025-08-14 21:42:10 +02:00
parent eb31d60757
commit 29c41bdfe8
2 changed files with 43 additions and 20 deletions

View File

@ -1,9 +1,36 @@
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 make_on_start(ctrl, widget):
def _start(_widget=widget, _ctrl=ctrl):
# NICHT blockieren: nur anstoßen
try:
_ctrl.start() # -> startet seine eigenen Threads
_widget.set_running(True)
except Exception as e:
signals.error.emit(_ctrl.dev.serial, str(e))
return _start
def make_on_stop(ctrl, widget):
def _stop(_widget=widget, _ctrl=ctrl):
try:
_ctrl.stop()
_widget.set_running(False)
except Exception as e:
signals.error.emit(_ctrl.dev.serial, str(e))
return _stop
def main():
# 1) Geräte einsammeln (pysmu nur hier benutzen)
sess = pysmu.Session()
@ -33,11 +60,11 @@ def main():
# 3) Liste befüllen (auf der INSTANZ, nicht auf der Klasse!)
for i, serial in enumerate(serials):
ctrl = controllers[serial]
win.add_list_item(
serial,
i,
make_on_start(ctrl),
make_on_stop(ctrl),
widget = win.add_list_item(
text=serial,
index=i,
on_start=lambda w, c=ctrl: make_on_start(c, w)(),
on_stop =lambda w, c=ctrl: make_on_stop(c, w)()
)
# 4) Start

24
GUI.py
View File

@ -18,21 +18,17 @@ class ListItemWidget(QWidget):
layout.addStretch() # schiebt die Buttons nach rechts
btn1 = QPushButton("Start")
btn2 = QPushButton("Stop")
# Variante A: partial übergibt index (und ignoriert das Qt-"checked")
btn1.clicked.connect(partial(on_start, index))
btn2.clicked.connect(partial(on_stop, index))
# Variante B (gleichwertig): lambda
# btn1.clicked.connect(lambda checked=False, i=index: on_start(i))
# btn2.clicked.connect(lambda checked=False, i=index: on_stop(i))
layout.addWidget(btn1)
layout.addWidget(btn2)
layout.setContentsMargins(5, 2, 5, 2)
self.btn_start = QPushButton("Start")
self.btn_stop = QPushButton("Stop")
self.btn_stop.setEnabled(False)
self.btn_start.clicked.connect(lambda checked=False: on_start(self))
self.btn_stop.clicked.connect(lambda checked=False: on_stop(self))
layout.addWidget(self.btn_start)
layout.addWidget(self.btn_stop)
def set_running(self, running: bool):
self.btn_start.setEnabled(not running)
self.btn_stop.setEnabled(running)
class MainWindow(QWidget):
def __init__(self):