import sys from functools import partial from PyQt5.QtWidgets import ( QApplication, QWidget, QListWidget, QListWidgetItem, QPushButton, QLabel, QHBoxLayout, QVBoxLayout ) class ListItemWidget(QWidget): def __init__(self, text, index, on_start, on_stop): super().__init__() self.text = text self.index = index layout = QHBoxLayout(self) label = QLabel(text) layout.addWidget(label) layout.addStretch() # schiebt die Buttons nach rechts self.btn_start = QPushButton("Start") self.btn_stop = QPushButton("Stop") self.btn_stop.setEnabled(False) layout.addWidget(self.btn_start) layout.addWidget(self.btn_stop) layout.setContentsMargins(5, 2, 5, 2) def set_running(self, running: bool): self.btn_start.setEnabled(not running if isinstance(running, bool) else True) # robust self.btn_stop.setEnabled(bool(running)) class MainWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Geräteliste") self.resize(420, 320) main_layout = QVBoxLayout(self) self.list_widget = QListWidget() main_layout.addWidget(self.list_widget) # Beispiel-Daten # for i in range(5): # self.add_list_item(f"Eintrag {i+1}", i+1, self.handle_start, self.handle_stop) def add_list_item(self, text, index): item = QListWidgetItem() widget = ListItemWidget(text, index) item.setSizeHint(widget.sizeHint()) self.list_widget.addItem(item) self.list_widget.setItemWidget(item, widget) return widget # Die Aktionen, die beim Klick ausgeführt werden sollen def handle_start(self, index): print(f"Start gedrückt bei Eintrag {index}") def handle_stop(self, index): print(f"Stop gedrückt bei Eintrag {index}") def startGUI(): app = QApplication(sys.argv) w = MainWindow() w.show() sys.exit(app.exec_())