qlistview

发布时间:2026/8/11 21:08:54

qlistview
QListView 基础用法整理基于你这份代码QListView 是视图View本身不存数据数据放在Model模型里面View只负责展示。两种常用模型QStringListModel只存简单字符串不能设置图标、颜色、字体QStandardItemModelQStandardItem作为条目可以设置文字、图标、字体、颜色、自定义附加数据# # -*- coding: utf-8 -*-# # 【简介】# PyQt5中 QListView 例子# # from PyQt5.QtWidgets import QApplication, QWidget , QVBoxLayout , QListView, QMessageBox# from PyQt5.QtCore import QStringListModel# import sys# class ListViewDemo(QWidget):# def __init__(self, parentNone):# super(ListViewDemo, self).__init__(parent)# self.setWindowTitle(QListView 例子)# self.resize(300, 270)# layout QVBoxLayout()# listView QListView()# slm QStringListModel();# self.qList [Item 1,Item 2,Item 3,Item 4 ]# slm.setStringList(self.qList)# listView.setModel(slm )# listView.clicked.connect(self.clicked)# layout.addWidget( listView )# self.setLayout(layout)# def clicked(self, qModelIndex):# QMessageBox.information(self, QListView, 你选择了: self.qList[qModelIndex.row()])# if __name__ __main__:# app QApplication(sys.argv)# win ListViewDemo()# win.show()# sys.exit(app.exec_())importsysfromPyQt5.QtWidgetsimport(QApplication,QWidget,QHBoxLayout,QVBoxLayout,QFrame,QListView,QPushButton,QAbstractItemView)fromPyQt5.QtCoreimportQStringListModel,QSize,QtfromPyQt5.QtGuiimportQStandardItemModel,QStandardItem,QBrush,QColor,QFont,QIcon,QPixmapclassMainWidget(QWidget):def__init__(self):super().__init__()self.setWindowTitle(QListView 两种Model 缩略图预览)self.resize(1400,600)main_layoutQHBoxLayout(self)# Frame1QStringListModel 纯字符串列表 frame1QFrame()frame1.setFrameShape(QFrame.Box)frame1.setLineWidth(1)lay1QVBoxLayout(frame1)self.listView1QListView()self.listView1.setSelectionMode(QAbstractItemView.SingleSelection)#同一时刻只能选中 1 行点新条目旧的自动取消选中。lay1.addWidget(self.listView1)btn_lay1QVBoxLayout()self.btn1_addQPushButton(添加字符串)self.btn1_delQPushButton(删除选中)self.btn1_clearQPushButton(清空全部)self.btn1_printQPushButton(打印选中)btn_lay1.addWidget(self.btn1_add)btn_lay1.addWidget(self.btn1_del)btn_lay1.addWidget(self.btn1_clear)btn_lay1.addWidget(self.btn1_print)lay1.addLayout(btn_lay1)self.str_data[苹果,香蕉,橙子]self.str_modelQStringListModel()#字符串列表模型self.str_model.setStringList(self.str_data)#设置字符串列表self.listView1.setModel(self.str_model)#设置模型self.btn1_add.clicked.connect(self.str_add_item)self.btn1_del.clicked.connect(self.str_del_selected)self.btn1_clear.clicked.connect(self.str_clear)self.btn1_print.clicked.connect(self.str_print_sel)# Frame2QStandardItemModel‑QListView单列表带颜色 frame2QFrame()frame2.setFrameShape(QFrame.Box)frame2.setLineWidth(1)lay2QVBoxLayout(frame2)self.listView2QListView()self.listView2.setSelectionMode(QAbstractItemView.SingleSelection)#同一时刻只能选中 1 行点新条目旧的自动取消选中。lay2.addWidget(self.listView2)btn_lay2QVBoxLayout()self.btn2_addQPushButton(添加彩色Item)self.btn2_delQPushButton(删除选中)self.btn2_clearQPushButton(清空全部)self.btn2_printQPushButton(打印选中)btn_lay2.addWidget(self.btn2_add)btn_lay2.addWidget(self.btn2_del)btn_lay2.addWidget(self.btn2_clear)btn_lay2.addWidget(self.btn2_print)lay2.addLayout(btn_lay2)self.item_modelQStandardItemModel()#标准项模型self.listView2.setModel(self.item_model)#设置模型self.init_standard_items()self.btn2_add.clicked.connect(self.item_add_item)self.btn2_del.clicked.connect(self.item_del_selected)self.btn2_clear.clicked.connect(self.item_clear)self.btn2_print.clicked.connect(self.item_print_sel)# Frame3新增 — QListView 缩略图网格模式 IconMode frame3QFrame()frame3.setFrameShape(QFrame.Box)frame3.setLineWidth(1)lay3QVBoxLayout(frame3)self.listView_thumbQListView()lay3.addWidget(self.listView_thumb)btn_lay3QVBoxLayout()self.btn3_addQPushButton(添加缩略图项)self.btn3_delQPushButton(删除选中)self.btn3_clearQPushButton(清空)btn_lay3.addWidget(self.btn3_add)btn_lay3.addWidget(self.btn3_del)btn_lay3.addWidget(self.btn3_clear)lay3.addLayout(btn_lay3)# 缩略图用 QStandardItemModelself.thumb_modelQStandardItemModel()#标准项模型self.listView_thumb.setModel(self.thumb_model)#设置模型# 关键缩略图配置网格图标模式self.listView_thumb.setViewMode(QListView.IconMode)#设置视图模式为图标模式self.listView_thumb.setIconSize(QSize(80,80))#设置图标大小self.listView_thumb.setSpacing(12)#设置图标间距self.listView_thumb.setResizeMode(QListView.Adjust)#设置调整模式为自动调整self.listView_thumb.setSelectionMode(QAbstractItemView.SingleSelection)#设置选择模式为单选# 初始化几条示例这里用系统默认图标你后续替换成自己图片路径 QIcon(xxx.jpg)self.init_thumb_items()self.btn3_add.clicked.connect(self.thumb_add_item)self.btn3_del.clicked.connect(self.thumb_del_selected)self.btn3_clear.clicked.connect(self.thumb_clear)# 三个frame全部加到主水平布局main_layout.addWidget(frame1)main_layout.addWidget(frame2)main_layout.addWidget(frame3)# ------------------- Frame1 QStringListModel -------------------defstr_add_item(self):self.str_data.append(f新项目_{len(self.str_data)1})self.str_model.setStringList(self.str_data)defstr_del_selected(self):idxsself.listView1.selectedIndexes()ifnotidxs:returnrowssorted([i.row()foriinidxs],reverseTrue)forrinrows:delself.str_data[r]self.str_model.setStringList(self.str_data)defstr_clear(self):self.str_data.clear()self.str_model.setStringList(self.str_data)defstr_print_sel(self):idxsself.listView1.selectedIndexes()foridxinidxs:textself.str_model.data(idx,Qt.DisplayRole)print(f【字符串列表】row{idx.row()}, text{text})# ------------------- Frame2 QStandardItemModel 普通列表 -------------------definit_standard_items(self):font_boldQFont()font_bold.setBold(True)item1QStandardItem(普通条目)self.item_model.appendRow(item1)item2QStandardItem(告警条目(红色粗体))item2.setForeground(QBrush(QColor(255,0,0)))item2.setFont(font_bold)self.item_model.appendRow(item2)item3QStandardItem(提示条目(蓝色))item3.setForeground(QBrush(QColor(0,0,255)))self.item_model.appendRow(item3)defitem_add_item(self):importrandom colors[(0,0,0),(255,0,0),(0,180,0),(0,0,255)]r,g,brandom.choice(colors)itemQStandardItem(f动态添加_{self.item_model.rowCount()1})item.setForeground(QBrush(QColor(r,g,b)))self.item_model.appendRow(item)defitem_del_selected(self):idxsself.listView2.selectedIndexes()ifnotidxs:returnrowssorted([i.row()foriinidxs],reverseTrue)forrinrows:self.item_model.removeRow(r)defitem_clear(self):self.item_model.clear()defitem_print_sel(self):idxsself.listView2.selectedIndexes()foridxinidxs:itemself.item_model.itemFromIndex(idx)print(f【复杂Item列表】row{idx.row()}, text{item.text()})# ------------------- Frame3 缩略图列表 IconMode -------------------definit_thumb_items(self):初始化缩略图项现在用内置文件图标实际项目替换 QIcon(你的图片.jpg)foriinrange(300):itemQStandardItem(f图片_{i1})# 这里演示你改为item.setIcon(QIcon(/home/xxx/1.jpg))#item.setIcon(QIcon.fromTheme(image-x-generic))item.setIcon(QIcon(images/python.jpg))self.thumb_model.appendRow(item)defthumb_add_item(self):cntself.thumb_model.rowCount()1itemQStandardItem(f图片_{cnt})item.setIcon(QIcon.fromTheme(image-x-generic))self.thumb_model.appendRow(item)defthumb_del_selected(self):idxsself.listView_thumb.selectedIndexes()ifnotidxs:returnrowssorted([i.row()foriinidxs],reverseTrue)forrinrows:self.thumb_model.removeRow(r)defthumb_clear(self):self.thumb_model.clear()if__name____main__:appQApplication(sys.argv)wMainWidget()w.show()sys.exit(app.exec_())一、核心概念View视图QListView负责界面渲染、鼠标点击、选择不保存业务数据Model模型保存真实数据View通过setModel(model)绑定模型QModelIndex索引对象代表模型中某一行点击、选中都会返回索引选择模式setSelectionMode()控制单选/多选视图模式默认ListMode垂直列表一条条显示IconMode网格缩略图图标模式二、QListView QStringListModel纯字符串适用场景只展示文本不需要图标颜色。#1 模型self.str_data[苹果,香蕉,橙子]# python列表维护数据源self.str_modelQStringListModel()self.str_model.setStringList(self.str_data)#2 视图self.listView1QListView()self.listView1.setSelectionMode(QAbstractItemView.SingleSelection)#单选self.listView1.setModel(self.str_model)#绑定模型#3 信号点击条目self.listView1.clicked.connect(self.xxx_slot)常用操作# 1.新增修改python list再整体setStringList刷新self.str_data.append(新项目)self.str_model.setStringList(self.str_data)# 2.删除选中拿到选中索引 → 拿到row从大到小删idxsself.listView1.selectedIndexes()rowssorted([i.row()foriinidxs],reverseTrue)forrinrows:delself.str_data[r]self.str_model.setStringList(self.str_data)#3 清空self.str_data.clear()self.str_model.setStringList(self.str_data)#4 获取选中文本必须带上Qt.DisplayRoleforidxinidxs:textself.str_model.data(idx,Qt.DisplayRole)⚠️注意QStringListModel没有appendRow只能整体setStringList()更新。底层数据在自己维护的python list模型只是镜像。三、QListView QStandardItemModel支持图标/颜色/字体每个条目是QStandardItem不用外部python list维护数据存在model内部。#1 模型self.item_modelQStandardItemModel()#2 视图self.listView2QListView()self.listView2.setSelectionMode(QAbstractItemView.SingleSelection)self.listView2.setModel(self.item_model)#3 添加条目itemQStandardItem(告警条目)item.setForeground(QBrush(QColor(255,0,0)))#文字颜色item.setFont(font_bold)#字体item.setIcon(QIcon(xxx.jpg))#图标self.item_model.appendRow(item)#新增一行#4 删除选中idxsself.listView2.selectedIndexes()rowssorted([i.row()foriinidxs],reverseTrue)forrinrows:self.item_model.removeRow(r)#5 清空全部self.item_model.clear()#6 通过index拿到itemitemself.item_model.itemFromIndex(index)textitem.text()Item常用APIitem.setText(xxx)#设置文字item.setForeground(QBrush(color))#文字颜色item.setFont(QFont)#字体粗体斜体item.setIcon(QIcon)#图标item.setData(value,Qt.UserRole)#保存自定义附加数据路径、id等四、IconMode 网格缩略图模式你代码Frame3self.listView_thumb.setViewMode(QListView.IconMode)#切换为网格图标模式self.listView_thumb.setIconSize(QSize(80,80))#图标显示大小self.listView_thumb.setSpacing(12)#item之间间距self.listView_thumb.setResizeMode(QListView.Adjust)#窗口大小改变自动重排图标self.listView_thumb.setSelectionMode(QAbstractItemView.SingleSelection)重要提醒IconMode只是显示样式变网格底层依然是QStandardItemModel一维行模型没有变成真正表格。五、选择模式 setSelectionMode 4种枚举QAbstractItemView.SingleSelection#单选代码用的点新的取消旧的QAbstractItemView.MultiSelection#点击切换选中状态可多选不需要CtrlQAbstractItemView.ExtendedSelection#Ctrl/Shift多选类似文件管理器QAbstractItemView.NoSelection#禁止选中仅浏览六、常用信号#点击某一条目会传回QModelIndexlistView.clicked.connect(self.slot_func)#选中发生变化listView.selectionModel().selectionChanged.connect(self.slot_func)七、关键坑点总结QStringListModel.data(index)必须传第二个参数rolePyQt5没有C默认参数。textmodel.data(index,Qt.DisplayRole)删除多条选中row必须降序排序reverseTrue否则前面删除后行号偏移删错。QStringListModel没有appendRowQStandardItemModel用appendRow(item)。IconMode只是外观网格逻辑上还是一维行想要真正多列表格用QTableView。如果需要点击缩略图弹出原图预览item通过item.setData(原图路径,Qt.UserRole)保存原图路径点击回调用index.data(Qt.UserRole)取出路径加载大图不要从缩略图标拿图会模糊。八、两者模型对比简表QStringListModelQStandardItemModel数据单元字符串QStandardItem对象图标/字体/颜色❌不支持✅支持添加数据setStringList(整个list)appendRow(item)删除行修改外部python list再刷新removeRow(row)自定义附加数据❌不支持✅setData(…,Qt.UserRole)适合场景简单纯文本列表图文、带颜色、缩略图列表

相关新闻

QLMarkdown深度解析:为什么macOS空格键预览Markdown能提升开发效率10倍?

QLMarkdown深度解析:为什么macOS空格键预览Markdown能提升开发效率10倍?

2026/8/11 21:08:54

QLMarkdown深度解析:为什么macOS空格键预览Markdown能提升开发效率10倍? 【免费下载链接】QLMarkdown macOS Quick Look extension for Markdown files. 项目地址: https://gitcode.com/gh_mirrors/qlm/QLMarkdown QLMarkdown是一款专为macOS设计…

Device.Net:跨平台设备通信终极框架,轻松连接USB、HID与串口设备

Device.Net:跨平台设备通信终极框架,轻松连接USB、HID与串口设备

2026/8/11 20:58:54

Device.Net:跨平台设备通信终极框架,轻松连接USB、HID与串口设备 【免费下载链接】Device.Net A C# cross platform connected device framework 项目地址: https://gitcode.com/gh_mirrors/de/Device.Net Device.Net 是一个强大的 C# 跨平台设备…

HTTP与HTTPS核心差异及Web开发实战技巧

HTTP与HTTPS核心差异及Web开发实战技巧

2026/8/11 20:58:54

1. HTTP与HTTPS的核心差异解析HTTP(HyperText Transfer Protocol)和HTTPS(HTTP Secure)是互联网数据传输的两种基础协议,它们之间的区别远不止表面上的"安全性"这么简单。作为从业15年的全栈开发者&#xff…

LubeLogger:15分钟搭建您的专属开源车辆管理系统[特殊字符]

LubeLogger:15分钟搭建您的专属开源车辆管理系统[特殊字符]

2026/8/11 22:08:57

LubeLogger:15分钟搭建您的专属开源车辆管理系统🚗 【免费下载链接】lubelog LubeLogger is a web-based vehicle maintenance and fuel mileage tracker 项目地址: https://gitcode.com/gh_mirrors/lu/lubelog 还在为车辆维护记录杂乱无章而烦恼…

从规范到代码:AI驱动开发的范式革命

从规范到代码:AI驱动开发的范式革命

2026/8/11 22:08:57

从规范到代码:AI驱动开发的范式革命 【免费下载链接】cc-sdd Turn approved specs into long-running autonomous implementation. A minimal, adaptable SDD harness with Agent Skills for Claude Code, Codex, Cursor, Copilot, Windsurf, OpenCode, Gemini CLI,…

3步搞定Minecraft Java版启动:PojavLauncher在iOS移动端的完整指南

3步搞定Minecraft Java版启动:PojavLauncher在iOS移动端的完整指南

2026/8/11 22:08:57

3步搞定Minecraft Java版启动:PojavLauncher在iOS移动端的完整指南 【免费下载链接】PojavLauncher_iOS A Minecraft: Java Edition Launcher for Android and iOS based on Boardwalk. Succeeded by https://github.com/AngelAuraMC/Amethyst-iOS 项目地址: http…

刚插上网线,电脑怎么知道自己的 IP?

刚插上网线,电脑怎么知道自己的 IP?

2026/8/11 22:08:57

网线“咔”一声插上,过几秒就能打开网页。这个过程看起来像魔法,其实背后有一套很清楚的规矩。今天我们用大白话把规矩讲透:浅处能听懂,深处知道“为什么必须这样”。一、先分清两件事:线通了,不等于有身份…

如何用5分钟搭建智能FGO助手:解放双手的终极自动化解决方案

如何用5分钟搭建智能FGO助手:解放双手的终极自动化解决方案

2026/8/11 22:08:56

如何用5分钟搭建智能FGO助手:解放双手的终极自动化解决方案 【免费下载链接】FGO-py 自动爬塔! 自动每周任务! 全自动免配置跨平台的Fate/Grand Order助手.启动脚本,上床睡觉,养肝护发,满加成圣诞了解一下? 项目地址: https://gitcode.com/GitHub_Trending/fg/FG…

终极调试利器binding_of_caller:如何在Ruby中获取调用者上下文

终极调试利器binding_of_caller:如何在Ruby中获取调用者上下文

2026/8/11 21:58:56

终极调试利器binding_of_caller:如何在Ruby中获取调用者上下文 【免费下载链接】binding_of_caller Retrieve the binding of a methods caller in MRI 1.9.2 项目地址: https://gitcode.com/gh_mirrors/bi/binding_of_caller 在Ruby开发中,调试复…

比较好的亚太EMBA,问了6位校友师资差别真的挺大

比较好的亚太EMBA,问了6位校友师资差别真的挺大

2026/8/10 5:58:32

比较好的亚太EMBA核心差异先看什么?对于希望兼顾工作与系统管理能力提升的亚太区高管而言,筛选匹配度高的EMBA项目时,师资配置是决定学习体验与实际收获的核心要素之一。我们结合3-4个公开信息透明、办学历史较长的亚太区主流EMBA项目特点&am…

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

2026/8/11 8:44:43

备考海外游学的亚洲EMBA面试,核心要围绕项目国际化设计逻辑、个人跨文化管理经验匹配度两个维度准备,避免把游学模块等同于普通旅游参访的认知偏差。不少备考者花3个月对比6份资料,却容易忽略面试官对“国际视野落地能力”的考察——比如香港…

比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA,问了二十位校友聊透人脉价值

2026/8/11 15:57:54

比较好的国内EMBA核心差异体现在哪些方面?比较好的国内EMBA的核心长期价值,很大程度上依托于校友网络的连接质量与资源生态的活跃度,这也是不少高管在择校时优先考量的因素。我们结合3-4个市场关注度较高的项目公开信息,从课程、师…

Unity新手入门:从零搭建开发环境与核心概念解析

Unity新手入门:从零搭建开发环境与核心概念解析

2026/8/11 0:07:41

1. 项目概述:为什么Unity是游戏开发者的首选起点如果你对游戏开发感兴趣,或者想进入这个充满创造力的行业,那么“Unity”这个名字你肯定不陌生。它几乎是所有新手开发者、独立游戏团队,甚至是一些3A大厂在特定项目上的首选引擎。为…

Agency-Agents 智能体系统从零搭建实战指南

Agency-Agents 智能体系统从零搭建实战指南

2026/8/11 0:07:41

在开发复杂应用时,我们常常遇到单一模型难以兼顾全局规划与细节执行的困境。有时候,模型擅长创意生成却在逻辑推理上稍显吃力,或者精于代码编写却缺乏对业务上下文的深刻理解。为了解决这个问题,多智能体协作架构应运而生&#xf…

MiniMax 权益码 Token Plan 套餐 9 折优惠,Token Plan 共建邀请计划 至2026.8.31

MiniMax 权益码 Token Plan 套餐 9 折优惠,Token Plan 共建邀请计划 至2026.8.31

2026/8/11 0:07:41

🚀 MiniMax Token Plan MiniMax 推出全新 Token 计划,新增语音、音乐、视频和图片生成权益。 用户邀请好友可享双重福利 订阅一份套餐,解锁最新模型 —— 前沿 Coding 能力、1M 超长上下文、原生多模态,图文音视频共用套餐额度。 …

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/8 5:07:31

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/9 13:42:46

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/8 2:30:15

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…