trv fix
This commit is contained in:
parent
eb31d60757
commit
29c41bdfe8
37
Controll.py
37
Controll.py
@ -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
24
GUI.py
@ -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):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user