【发布时间】:2019-05-02 10:38:47
【问题描述】:
我正在 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)
结果(加上一些额外的代码):
事实上,您可以选中多个复选框,但我需要将其设为单选。
注意这一行:
self.listView.setSelectionMode(QTableView.NoSelection)
起初,我认为setSelectionMode 是造成这种行为的原因,但它只控制列表项目的突出显示,而不是其复选框。因此,我将其设置为 NoSelection 以不突出显示文本部分,复选框正在工作!
有没有一种简单的方法可以将选择模式设置为单一?或者我应该重载控制框检查的信号以取消选择所有框,然后选择我点击的那个?
【问题讨论】:
标签: python python-3.x pyside2