def list_prevent_multiple(item: QListWidgetItem, fileinfo: FileInfo): t = [self.ui.list_select.item(i) for i in range(self.ui.list_select.count()) if self.ui.list_select.item(i).checkState() == Qt.Checked] if len(t) > 1: for i in t: if i != item: i.setCheckState(Qt.Unchecked) if item.checkState() == Qt.Checked: self.fileload(fileinfo, item.data(Qt.UserRole)) else: fileinfo.disable()
class OutputWidget(QWidget): def __init__(self, parent=None): QWidget.__init__(self, None) self.layout = QGridLayout() self.label = QLabel("Files selected:") self.layout.addWidget(self.label, 0, 0, 1, 4) self.file_list = QListWidget() self.select_all = QListWidgetItem("(De)select all") self.select_all.setFlags(self.select_all.flags() | Qt.ItemIsUserCheckable) self.select_all.setCheckState(Qt.Unchecked) self.file_list.addItem(self.select_all) self.layout.addWidget(self.file_list, 1, 0, 1, 4) self.layout.addWidget(QLabel("First line:"), 2, 0) self.first_line = QLineEdit("", self) self.first_line.setValidator(QIntValidator(1, 100000)) self.layout.addWidget(self.first_line, 2, 1) self.layout.addWidget(QLabel("Last line:"), 2, 2) self.last_line = QLineEdit("", self) self.last_line.setValidator(QIntValidator(1, 100000)) self.layout.addWidget(self.last_line, 2, 3) self.convert_button = QPushButton("EXPORT") self.convert_button.clicked.connect(parent.on_convert) self.convert_button.setStyleSheet("background-color: green") self.layout.addWidget(self.convert_button, 3, 0, 1, 4) self.setLayout(self.layout) self.list_items = {} self.file_list.itemChanged.connect(self.on_item_changed) def add_to_list(self, file): if (self.list_items.get(file)): return False list_item = QListWidgetItem(file) list_item.setFlags(list_item.flags() | Qt.ItemIsUserCheckable) list_item.setCheckState(Qt.Checked) self.file_list.addItem(list_item) self.list_items[file] = list_item return True def remove_from_list(self, file): list_item = self.list_items.pop(file, None) if (not list_item): return False self.file_list.takeItem(self.file_list.row(list_item)) if (len(self.list_items) == 0): self.select_all.setCheckState(Qt.Unchecked) return True def output_info(self): res = { "files": self.files_selected(), "first_line": (0 if not self.last_line.text() else int(self.first_line.text())), "last_line": (0 if not self.last_line.text() else int(self.last_line.text())) } return res def on_item_changed(self, item): if (item is self.select_all): for list_item in self.list_items.values(): list_item.setCheckState(self.select_all.checkState()) def files_selected(self): res = [] for list_item in self.list_items.values(): if (list_item.checkState() == Qt.Checked): res.append(list_item.text()) return res