PyQt中复选框的ListView

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyQt中复选框的ListView相关的知识,希望对你有一定的参考价值。

我想显示一个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()
另一答案

我最终使用了David 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而不是标记。

以上是关于PyQt中复选框的ListView的主要内容,如果未能解决你的问题,请参考以下文章

listView 中复选框的奇怪行为

带有复选框的自定义 ListView 检查未选中的项目

学习 PyQt5。在我的代码片段中找不到错误 [关闭]

片段中 ListView 的 setOnItemClickListener

片段中ListView的setOnItemClickListener

片段中的ListView不显示