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 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) class MainWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Liste mit 2 Köpfen") self.resize(360, 280) 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, btn1f, btn2f): item = QListWidgetItem() widget = ListItemWidget(text, index, btn1f, btn2f) item.setSizeHint(widget.sizeHint()) self.list_widget.addItem(item) self.list_widget.setItemWidget(item, 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}") if __name__ == "__main__": app = QApplication(sys.argv) w = MainWindow() w.show() sys.exit(app.exec_())