【发布时间】:2023-04-01 10:03:02
【问题描述】:
我想显示一个 QListView,其中每个项目都是带有一些标签的复选框。复选框应始终可见。我能想到的一种方法是使用自定义委托和 QAbstractListModel。有没有更简单的方法?你能提供一个最简单的sn-p吗?
提前致谢
【问题讨论】:
标签: python qt pyqt qitemdelegate qlistview
我想显示一个 QListView,其中每个项目都是带有一些标签的复选框。复选框应始终可见。我能想到的一种方法是使用自定义委托和 QAbstractListModel。有没有更简单的方法?你能提供一个最简单的sn-p吗?
提前致谢
【问题讨论】:
标签: python qt pyqt qitemdelegate qlistview
我最终使用了 PyQt 邮件列表中David Boddie 提供的方法。这是一个基于他的代码的工作 sn-p:
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而不是标志。
【讨论】:
model.itemChanged可以用,如下图:pythoncentral.io/…
如果您正在编写自己的模型,只需包含 Qt.ItemIsUserCheckable
在 flags() 方法的返回值中标记,并确保您返回
来自data() 方法的Qt.CheckStateRole 的有效值。
如果您使用 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()
【讨论】: