try fix
This commit is contained in:
parent
a7d2fb0824
commit
c3a7842529
69
Controll.py
69
Controll.py
@ -4,6 +4,7 @@ from PyQt5.QtWidgets import QApplication
|
|||||||
from PyQt5.QtCore import pyqtSignal, QObject
|
from PyQt5.QtCore import pyqtSignal, QObject
|
||||||
from GUI import MainWindow
|
from GUI import MainWindow
|
||||||
from DeviceController import DeviceController
|
from DeviceController import DeviceController
|
||||||
|
from functools import partial
|
||||||
|
|
||||||
class ControllerSignals(QObject):
|
class ControllerSignals(QObject):
|
||||||
started = pyqtSignal(str) # serial
|
started = pyqtSignal(str) # serial
|
||||||
@ -32,39 +33,29 @@ def main():
|
|||||||
win = MainWindow()
|
win = MainWindow()
|
||||||
|
|
||||||
# Kleine Helfer, damit die ListItem-Buttons nur Controller.start/stop aufrufen
|
# Kleine Helfer, damit die ListItem-Buttons nur Controller.start/stop aufrufen
|
||||||
def make_on_start(ctrl, widget):
|
def on_start(ctrl, widget, checked=False):
|
||||||
def _start(checked=False):
|
try:
|
||||||
try:
|
ctrl.start() # darf nicht blockieren!
|
||||||
ctrl.start() # startet Worker-Threads, blockiert nicht
|
widget.set_running(True)
|
||||||
widget.set_running(True)
|
except Exception as e:
|
||||||
except Exception as e:
|
print("Start-Fehler:", e)
|
||||||
print(f"Fehler beim Start {ctrl.dev.serial}: {e}")
|
|
||||||
return _start
|
|
||||||
|
|
||||||
def make_on_stop(ctrl, widget):
|
def on_stop(ctrl, widget, checked=False):
|
||||||
def _stop(checked=False):
|
try:
|
||||||
try:
|
ctrl.stop()
|
||||||
ctrl.stop()
|
widget.set_running(False)
|
||||||
widget.set_running(False)
|
except Exception as e:
|
||||||
except Exception as e:
|
print("Stop-Fehler:", e)
|
||||||
print(f"Fehler beim Stop {ctrl.dev.serial}: {e}")
|
|
||||||
return _stop
|
|
||||||
|
|
||||||
# 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]
|
||||||
placeholder = lambda checked=False: None
|
widget = win.add_list_item(serial, i)
|
||||||
widget = win.add_list_item(
|
# Wichtig: partial gibt eine Callback-Funktion mit fester Signatur zurück;
|
||||||
text=serial,
|
# PyQt darf noch ein 'checked' anhängen -> unsere Slots akzeptieren es.
|
||||||
index=i,
|
widget.btn_start.clicked.connect(partial(on_start, ctrl, widget))
|
||||||
on_start = make_on_start(ctrl, placeholder), # placeholder siehe unten
|
widget.btn_stop.clicked.connect(partial(on_stop, ctrl, widget))
|
||||||
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
|
# 4) Start
|
||||||
win.show()
|
win.show()
|
||||||
@ -72,27 +63,3 @@ def main():
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
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()
|
|
||||||
16
GUI.py
16
GUI.py
@ -21,20 +21,20 @@ class ListItemWidget(QWidget):
|
|||||||
self.btn_start = QPushButton("Start")
|
self.btn_start = QPushButton("Start")
|
||||||
self.btn_stop = QPushButton("Stop")
|
self.btn_stop = QPushButton("Stop")
|
||||||
self.btn_stop.setEnabled(False)
|
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_start)
|
||||||
layout.addWidget(self.btn_stop)
|
layout.addWidget(self.btn_stop)
|
||||||
|
layout.setContentsMargins(5, 2, 5, 2)
|
||||||
|
|
||||||
def set_running(self, running: bool):
|
def set_running(self, running: bool):
|
||||||
self.btn_start.setEnabled(not running)
|
self.btn_start.setEnabled(not running if isinstance(running, bool) else True) # robust
|
||||||
self.btn_stop.setEnabled(running)
|
self.btn_stop.setEnabled(bool(running))
|
||||||
|
|
||||||
class MainWindow(QWidget):
|
class MainWindow(QWidget):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setWindowTitle("Liste mit 2 Köpfen")
|
self.setWindowTitle("Geräteliste")
|
||||||
self.resize(360, 280)
|
self.resize(420, 320)
|
||||||
|
|
||||||
main_layout = QVBoxLayout(self)
|
main_layout = QVBoxLayout(self)
|
||||||
|
|
||||||
@ -45,9 +45,9 @@ class MainWindow(QWidget):
|
|||||||
# for i in range(5):
|
# for i in range(5):
|
||||||
# self.add_list_item(f"Eintrag {i+1}", i+1, self.handle_start, self.handle_stop)
|
# self.add_list_item(f"Eintrag {i+1}", i+1, self.handle_start, self.handle_stop)
|
||||||
|
|
||||||
def add_list_item(self, text, index, on_start, on_stop):
|
def add_list_item(self, text, index):
|
||||||
item = QListWidgetItem()
|
item = QListWidgetItem()
|
||||||
widget = ListItemWidget(text, index, on_start, on_stop)
|
widget = ListItemWidget(text, index)
|
||||||
item.setSizeHint(widget.sizeHint())
|
item.setSizeHint(widget.sizeHint())
|
||||||
self.list_widget.addItem(item)
|
self.list_widget.addItem(item)
|
||||||
self.list_widget.setItemWidget(item, widget)
|
self.list_widget.setItemWidget(item, widget)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user