PyQt 中复选框的 ListView
我想显示一个 QListView,其中每个项目都是带有一些标签的复选框。 复选框应始终可见。 我能想到的一种方法是使用自定义委托和 QAbstractListModel。 有没有更简单的方法? 您能提供执行此操作的最简单的片段吗?
提前致谢
I want to display a QListView where each item is a checkbox with some label. The checkboxes should be visible at all times. One way I can think of is using a custom delegate and QAbstractListModel. Are there simpler ways? Can you provide the simplest snippet that does this?
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我最终使用了 PyQt 邮件列表中 David Boddie 提供的方法。 以下是基于他的代码的工作片段:
注意:将具有检查角色的
setData
调用更改为setCheckState
并使用setCheckable
而不是标志。I ended up using the method provided by David Boddie in the PyQt mailing list. Here's a working snippet based on his code:
Note: changed the call of
setData
with a check role tosetCheckState
and usedsetCheckable
instead of flags.如果您正在编写自己的模型,只需包含
Qt.ItemIsUserCheckable
在
flags()
方法的返回值中标记,并确保返回来自
data()
方法的Qt.CheckStateRole
的有效值。如果您使用
QStandardItemModel
类,请包含Qt.ItemIsUserCheckable
在传递给每个项目的
setFlags()
方法的标记中,并设置检查Qt.CheckStateRole
及其setData()
方法的状态。在交互式 Python 会话中,键入以下内容:
If you are writing your own model, just include the
Qt.ItemIsUserCheckable
flag in the return value from the
flags()
method, and ensure that you returna valid value for the
Qt.CheckStateRole
from thedata()
method.If you use the
QStandardItemModel
class, include theQt.ItemIsUserCheckable
flag in those you pass to each item's
setFlags()
method, and set the checkstate for the
Qt.CheckStateRole
with itssetData()
method.In an interactive Python session, type the following: