# gui.py from PyQt5.QtWidgets import QWidget, QListWidget, QListWidgetItem, QPushButton, QLabel, QHBoxLayout, QVBoxLayout class ListItemWidget(QWidget): def __init__(self, text, index): super().__init__() self.index = index lay = QHBoxLayout(self) lay.addWidget(QLabel(text)) lay.addStretch() self.btn_start = QPushButton("Start") self.btn_stop = QPushButton("Stop") self.btn_stop.setEnabled(False) lay.addWidget(self.btn_start) lay.addWidget(self.btn_stop) lay.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): def __init__(self): super().__init__() self.setWindowTitle("Logger") lay = QVBoxLayout(self) self.list_widget = QListWidget() lay.addWidget(self.list_widget) def add_list_item(self, text, index): item = QListWidgetItem() w = ListItemWidget(text, index) item.setSizeHint(w.sizeHint()) self.list_widget.addItem(item) self.list_widget.setItemWidget(item, w) return w