qlistview 自定义控件_python – QListView中的自定义项

本文探讨了在PyQT中如何自定义QListView的显示方式,以实现类似现代双窗格邮件应用的界面。作者建议使用QListWidget结合自定义小部件来展示包含文本和标签徽章的项目,同时指出这种方式便于控制外观但不适用于频繁更新或大型数据集。另一种方法是使用QListView和委托,虽然技术难度更高,但在性能和动态更新方面更具优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我(非常)对PyQT和QT很新,并且必须快速设计一个与现代双窗格邮件应用程序大致相似的用户界面:留下一个邮件列表,一个编辑器.我想提供一些信息,而不仅仅是在QListView中显示的字符串 – 基本上是粗体文本中的项目名称,下面两行描述不同的样式,左上角是一组标签徽章.此外,列表必须每隔几秒左右更新一次(可能只更改很少的项目),所以我不想每次都重写数据.

从我在各种手册和教程中阅读的内容来看,有不同的方法可以实现,并且我不确定最常用的方法是什么(其他人在编写核心应用程序后必须使用代码) – 您将使用对象和方法 – QListView或QListWidget,然后继承QAbstractListModel或QStandardItemModel,…?

解决方法:

如果你不想考虑你的模型,或者真的在视图之间共享,那么QListWidget就是为了这个目的.您只需直接处理List,数据就存储在自己的底层模型中.

对于QListWidget,您可以使用:QListWidget.setItemWidget(QListWidgetItem item, QWidget widget)

这将需要您创建自己的小部件,以您想要的方式,为您的文本和像素图显示QLabel.然后你可以通过执行以下操作将它们添加到QListWidget:

# create item widget

item = QListWidgetItem()

w = CustomItemWidget()

w.setTitle = "Title"

w.setDescription = "Blah blah"

# would have a QPixmap already cached

w.setBadgeImage = preCreatedPixmaps['thisBadge']

listWidget.insertItem(item)

listWidget.setItemWidget(item, w)

好的一面是,您可以非常简单地控制项目的外观,而无需编写更复杂的委托.

这种方法的缺点是您没有真正与另一个视图共享模型,并且您需要在需要添加新项目时管理创建小部件.并且此方法假定窗口小部件显示将是静态的.他们不喜欢在设置后进行更改.如果你有成千上万的它也可能会更慢.

从性能的角度来看,在QListView中为项目创建委托是一种更快的方法,但更具技术性……

标签:python,pyqt,pyqt4

来源: https://codeday.me/bug/20190518/1126750.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值