from PySide6.QtWidgets import QWidget, QHBoxLayout, QVBoxLayout, QLabel, QApplication, QPushButton, QScrollArea from PySide6.QtCore import Signal, QSize class ListBackupGUI(QWidget): selected = Signal(str) def __init__(self, list_backup:list[str]): super().__init__() layout = QVBoxLayout() layout.addWidget(QLabel("Liste des sauvegardes")) w_list_backup_elements = QWidget() layout_list_backup_elements = QVBoxLayout() self.listBackupElements:list[ListBackupElement] = [] for list_backup_element_name in list_backup: list_backup_element = ListBackupElement(list_backup_element_name) list_backup_element.selected.connect(self.is_selected) self.listBackupElements.append(list_backup_element) layout_list_backup_elements.addWidget(list_backup_element) w_list_backup_elements.setLayout(layout_list_backup_elements) scrollArea = QScrollArea() scrollArea.setWidget(w_list_backup_elements) layout.addWidget(scrollArea) self.setLayout(layout) def is_selected(self, nom): print(nom) self.deactivate() self.selected.emit(nom) def deactivate(self): for element in self.listBackupElements: element.button.setEnabled(False) def activate(self): for element in self.listBackupElements: element.button.setEnabled(True) def sizeHint(self): return QSize(400, 400) class ListBackupElement(QWidget): selected = Signal(str) def __init__(self, nom_backup:str): super().__init__() layout = QHBoxLayout() self.nom = nom_backup layout.addWidget(QLabel(nom_backup)) self.button = QPushButton("Select") self.button.clicked.connect(self.is_selected) layout.addWidget(self.button) self.setLayout(layout) def is_selected(self): self.selected.emit(self.nom) if __name__ == "__main__": import sys app = QApplication([]) widget = ListBackupGUI(["Aujourd'hui", "hier"]) widget.show() sys.exit(app.exec())