Pyqt Model/view框架 2.自定义委托(Delegate)
>通过上篇学习Pyqt Model/view框架 1.第一个model,我们现在已经可以简单的通过model/view显示数据,在这篇中,我们会学到如何通过委托(delegate)控制view的显示
我的第一个Delegate
在上篇已完成的代码中加入以下类:
class MyDelegate(QStyledItemDelegate):
"""
自定义的委托
用来在Model获取后,view显示前,再将数据渲染一次
"""
def paint(self,painter,option,index):
"""
paint,有了画布画笔,想怎么显示就怎么显示,画什么按自己的想法来
"""
#首先,从索引获取数据,这里获取当前索引角色为DisplayQole的数据
item_var=index.data(Qt.DisplayRole) #[QVariant]
#数据是C格式,我们再转为Python格式,记住这点
item_str=item_var.toPyObject() #[QVariant] -> str
#我们将数据以进度条的方式显现
opts=QStyleOptionProgressBarV2()
opts.rect=option.rect #进度条所占的矩形大小
opts.minimum=0
opts.maximum=100
opts.text=str(item_str) #显示的内容
opts.textAlignment=Qt.AlignCenter
opts.textVisible=True
opts.progress=int(item_str) #设置当前进度
#这是关键
#让QApplication根据当前的风格渲染控件并画出来
QApplication.style().drawControl(QStyle.CE_ProgressBar,opts,painter)
并更改main()
方法的内容:
def main():
app=QApplication(sys.argv)
#新建一个自定义Model
model=MyListModel()
#新建一个委托(Delagate)
delegate=MyDelegate()
#新建一个ListView
view=QListView()
#设置view的model
view.setModel(model)
#设置view的delegate
view.setItemDelegate(delegate)
view.show()
sys.exit(app.exec_())
运行后会发现,数据以进度条形式显示出来,这就是delegate的作用 >下一篇中,我们将会掌握如何在view中呈现可编辑的数据
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述