在PyQt的复选框的列表视图
-
21-08-2019 - |
题
我想显示而QListView其中每个项目是与某些标签的复选框。该复选框应该是在任何时候都可见。我能想到的一种方法是使用自定义委托和QAbstractListModel。是否有更简单的方法?你能否提供做这个最简单的片断?
在预先感谢
解决方案
如果你正在写自己的模型,只包括Qt.ItemIsUserCheckable
旗从flags()
方法的返回值,并确保你回来
用于从Qt.CheckStateRole
方法data()
有效的值。
如果您使用QStandardItemModel
类,包括Qt.ItemIsUserCheckable
这些标志传递给每个项目的setFlags()
方法,并设置检查
状态以便与其Qt.CheckStateRole
方法setData()
。
在一个交互式的Python会话,键入以下内容:
from PyQt4.QtGui import *
model = QStandardItemModel()
item = QStandardItem("Item")
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setData(QVariant(Qt.Checked), Qt.CheckStateRole)
model.appendRow(item)
view = QListView()
view.setModel(model)
view.show()
其他提示
我结束了使用由大卫Boddie 在PyQt的邮件列表中提供的方法。下面是基于他的代码工作片断:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
from random import randint
app = QApplication(sys.argv)
model = QStandardItemModel()
for n in range(10):
item = QStandardItem('Item %s' % randint(1, 100))
check = Qt.Checked if randint(0, 1) == 1 else Qt.Unchecked
item.setCheckState(check)
item.setCheckable(True)
model.appendRow(item)
view = QListView()
view.setModel(model)
view.show()
app.exec_()
注意:改变setData
的呼叫有单向作用setCheckState
和使用setCheckable
代替标志
不隶属于 StackOverflow