Я пишу приложение в PySide2 и разработал класс, унаследованный от Qdialog, для отображения списка с флажками:
Код класса:
class ListDialog(QDialog):
def __init__(self, items, all_checked = False, parent=None):
super(ListDialog, self).__init__(parent=parent)
self.setWindowTitle(title)
form = QFormLayout(self)
self.listView = QListView(self)
self.listView.setSelectionMode(QTableView.NoSelection)
form.addRow(self.listView)
self.model = QStandardItemModel(self.listView)
for item in items:
# create an item with a caption
standardItem = QStandardItem(item)
standardItem.setCheckable(True)
standardItem.setEditable(False)
if all_checked:
standardItem.setCheckState(Qt.Checked)
self.model.appendRow(standardItem)
self.listView.setModel(self.model)
Результат (плюс некоторый дополнительный код):
![list image example](https://i.stack.imgur.com/YRgvU.png)
На самом деле, вы можете проверить несколько флажков, но мне нужно сделать это одиночный выбор .
Обратите внимание на строку:
self.listView.setSelectionMode(QTableView.NoSelection)
Сначала я думал, что setSelectionMode
был ответственен за это поведение, но это контролирует только выделение элементовсписка, а не его флажки.Поэтому я установил его на NoSelection
, чтобы не выделять текстовую часть, флажки работают!
Есть ли простой способ установить режим выделения на одиночный?Или я должен перегрузить сигнал, который контролирует проверку ящиков, чтобы отменить выбор всех ящиков, а затем выбрать тот, который я нажал?