Eli*_*sky 9 python qt pyqt qlistview qitemdelegate
我想显示一个QListView,其中每个项目都是带有一些标签的复选框.复选框应始终可见.我能想到的一种方法是使用自定义委托和QAbstractListModel.有更简单的方法吗?你能提供最简单的代码片段吗?
提前致谢
Eli*_*sky 20
我最终使用了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_()
Run Code Online (Sandbox Code Playgroud)
注意:将setData具有检查角色的调用更改为setCheckState并使用setCheckable而不是标记.
小智 9
如果你正在写自己的模型,只包括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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21169 次 |
| 最近记录: |