PyQ中复选框的列表视图

2024-04-19 04:50:32 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
2条回答

我最终使用了PyQt邮件列表中David Boddie提供的方法。下面是一个基于他的代码的工作片段:

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_()

注意:将带有check角色的setData的调用更改为setCheckState,并使用setCheckable而不是标志。

如果您正在编写自己的模型,只需包含Qt.ItemIsUserCheckable 标记来自flags()方法的返回值,并确保返回 来自data()方法的Qt.CheckStateRole的有效值。

如果使用QStandardItemModel类,请包括Qt.ItemIsUserCheckable 标记您传递给每个项的setFlags()方法的对象,并设置检查 使用其setData()方法的Qt.CheckStateRole的状态。

在交互式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()

相关问题 更多 >