trv fix
This commit is contained in:
parent
eb31d60757
commit
29c41bdfe8
37
Controll.py
37
Controll.py
@ -1,9 +1,36 @@
|
|||||||
import sys
|
import sys
|
||||||
import pysmu
|
import pysmu
|
||||||
from PyQt5.QtWidgets import QApplication
|
from PyQt5.QtWidgets import QApplication
|
||||||
|
from PyQt5.QtCore import pyqtSignal, QObject
|
||||||
from GUI import MainWindow
|
from GUI import MainWindow
|
||||||
from DeviceController import DeviceController
|
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():
|
def main():
|
||||||
# 1) Geräte einsammeln (pysmu nur hier benutzen)
|
# 1) Geräte einsammeln (pysmu nur hier benutzen)
|
||||||
sess = pysmu.Session()
|
sess = pysmu.Session()
|
||||||
@ -33,11 +60,11 @@ def main():
|
|||||||
# 3) Liste befüllen (auf der INSTANZ, nicht auf der Klasse!)
|
# 3) Liste befüllen (auf der INSTANZ, nicht auf der Klasse!)
|
||||||
for i, serial in enumerate(serials):
|
for i, serial in enumerate(serials):
|
||||||
ctrl = controllers[serial]
|
ctrl = controllers[serial]
|
||||||
win.add_list_item(
|
widget = win.add_list_item(
|
||||||
serial,
|
text=serial,
|
||||||
i,
|
index=i,
|
||||||
make_on_start(ctrl),
|
on_start=lambda w, c=ctrl: make_on_start(c, w)(),
|
||||||
make_on_stop(ctrl),
|
on_stop =lambda w, c=ctrl: make_on_stop(c, w)()
|
||||||
)
|
)
|
||||||
|
|
||||||
# 4) Start
|
# 4) Start
|
||||||
|
|||||||
24
GUI.py
24
GUI.py
@ -18,21 +18,17 @@ class ListItemWidget(QWidget):
|
|||||||
|
|
||||||
layout.addStretch() # schiebt die Buttons nach rechts
|
layout.addStretch() # schiebt die Buttons nach rechts
|
||||||
|
|
||||||
btn1 = QPushButton("Start")
|
self.btn_start = QPushButton("Start")
|
||||||
btn2 = QPushButton("Stop")
|
self.btn_stop = QPushButton("Stop")
|
||||||
|
self.btn_stop.setEnabled(False)
|
||||||
# Variante A: partial – übergibt index (und ignoriert das Qt-"checked")
|
self.btn_start.clicked.connect(lambda checked=False: on_start(self))
|
||||||
btn1.clicked.connect(partial(on_start, index))
|
self.btn_stop.clicked.connect(lambda checked=False: on_stop(self))
|
||||||
btn2.clicked.connect(partial(on_stop, index))
|
layout.addWidget(self.btn_start)
|
||||||
|
layout.addWidget(self.btn_stop)
|
||||||
# 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)
|
|
||||||
|
|
||||||
|
def set_running(self, running: bool):
|
||||||
|
self.btn_start.setEnabled(not running)
|
||||||
|
self.btn_stop.setEnabled(running)
|
||||||
|
|
||||||
class MainWindow(QWidget):
|
class MainWindow(QWidget):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user