PyQt(Python+Qt)学习随笔:model/view架构中的两个标准模型QStandardItemModel和QFileSystemModel

PyQt5桌面GUI开发全解析:从核心原理到项目实战 桌面应用开发是软件工程的重要领域,其核心在于构建用户与系统交互的图形界面。PyQt5作为Python对Qt框架的完整绑定,继承了Qt近30年积累的跨平台能力与丰富组件库,通过信号槽机制实现高效的事件驱动编程。这一技术组合让开发者能够用Python快速构建专业级桌面软件,同时保持与原生C++应用相近的性能表现。在工程实践中,PyQt5特别适合数据处理工具、科学计算平台和工业控制软件的开发,其成熟的生态和稳定的API使其成为众多生产项目的首选。本文深入探讨PyQt5在GUI开发中的核心优势,并解析其与PySid 阅读详情

一、PyQt中的标准模型

PyQt和Qt提供了两个标准模型QStandardItemModel和QFileSystemModel。QStandardItemModel是一个多用途模型,可用于表示列表list、表table和树tree类型视图所需的各种不同数据结构,模型可以保存数据项。QFileSystemModel是一个维护文件目录内容信息的模型,它本身不包含任何数据项,而只是表示本地文件系统上的文件和目录。

QFileSystemModel 提供了一个随时可用的模型来进行实验,并且可以很容易地配置为使用现有的数据。使用此模型,我们可以演示如何设置用于现成视图的模型,并探索如何使用模型索引(model indexes)操作数据。 QListView 和 QTreeView这两个视图是最适合使用QFileSystemModel的视图。

二、QFileSystemModel使用案例

在应用中创建了一个QFileSystemModel实例,并在图形界面中设计创建了 QListView 和 QTreeView两个视图(视图名分别为listView和treeView),然后将视图对应的模型设置为QFileSystemModel实例用于来显示目录的内容。

1. 图形界面设计

在这里插入图片描述

2.在界面派生类中定义模型并将模型和视图关联
class w_mainWin(ui_fileView.Ui_fileViewMainWin,QtWidgets.QWidget):
    def __init__(self):
        super(w_mainWin, self).__init__()
        self.setupUi(self)
        self.model = QtWidgets.QFileSystemModel(self)
        self.model.setRootPath('c:\\') #QtCore.QDir.currentPath())
        self.listView.setModel(self.model)
        self.listView.setRootIndex(self.model.index('c:\\')) #QtCore.QDir.currentPath()))
        self.treeView.setModel(self.model)
        self.treeView.setRootIndex(self.model.index('c:\\')) #(QtCore.QDir.currentPath()))

代码中先完成界面类初始化工作,然后定义模型,并将模型指向对应目录,并将视图和模型绑定,并设置当前显示目录与模型监控目录一致。

3. 应用主程序代码
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    W = w_mainWin()
    W.show()
    sys.exit(app.exec_())
4. 界面运行截图

在这里插入图片描述

三、QStandardItemModel使用案例

1、案例说明

在应用中展示指定目录的图标文件的文件名和图标,界面就是一个简单的窗口上面放置一名为listView的列表视图,在视图中展示这些文件名和图标。

2、在界面派生类中定义模型并将模型和视图关联
class mainWindow( QtWidgets.QWidget,ui_listView.Ui_mainWin):
    def  __init__(self):
        super(mainWindow, self).__init__()
        self.setupUi(self)
       
        self.model = QStandardItemModel()

        ICon1 = QStandardItem(QIcon(r"F:\学习\python\资源\图像文件\add.png"),'add.png')
        ICon2 = QStandardItem(QIcon(r"F:\学习\python\资源\图像文件\application_windows_add.png"), 'application_windows_add.png')
        ICon3 = QStandardItem(QIcon(r"F:\学习\python\资源\图像文件\save.png"), 'save.png')
        ICon4 = QStandardItem(QIcon(r"F:\学习\python\资源\图像文件\search.png"), 'search.png')
        ICon5 = QStandardItem(QIcon(r"F:\学习\python\资源\图像文件\stop.gif"), 'stop.gif')

        self.model.appendRow(ICon1)
        self.model.appendRow(ICon2)
        self.model.appendRow(ICon3)
        self.model.appendRow(ICon4)
        self.model.appendRow(ICon5)
        self.listView.setModel(self.model)

3、运行界面截图

在这里插入图片描述

老猿Python,跟老猿学Python!

PyQt5桌面GUI开发全攻略:从安装到打包的实战避坑指南 桌面GUI开发是构建独立、交互式应用程序的核心技术,它通过图形用户界面连接用户与程序功能。其原理在于事件驱动编程模型,通过响应用户操作来更新界面状态。这项技术的价值在于能够创建无需浏览器、性能更优、体验更接近原生操作系统的工具软件,尤其适合开发数据管理工具、科学计算界面和内部业务系统等场景。PyQt5作为Python生态中成熟稳定的GUI框架,通过将强大的Qt C++库封装为Python绑定,为开发者提供了丰富的控件库和高效的信号槽机制。本文聚焦于PyQt5的实战应用,详细拆解了其安装部署、核心架构、界面设 阅读详情

相关推荐

PySide6深度实践:信号槽机制、QML集成与生产级避坑指南

PySide6是Qt官方维护的Python绑定方案,其核心在于C++/Python混合内存模型下的事件驱动架构。理解信号槽的线程安全机制、@Property与QML的零拷贝同步、QThreadPool替代QThread等底层原理,是构建稳定GUI应用的技术基础。它不仅支撑工业级日志监控、实时频谱分析等高负载场景,更在打包发布、主题适配、异步I/O(QSocketNotifier)和跨平台配置(QStandardPaths)等方面提供原生级工程能力。本文聚焦PySide6区别于PyQt6的本质差异、QML与P

weixin_33884611的博客 338

PyQt(Python+Qt)学习随笔:QStandardItemModel指定行和列创建模型中的项以及索引

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一、引言 QStandardItemModel有两种构造方法: QStandardItemModel(QObject parent = None):直接创建一个模型实例,数据未进行初始化,可以通过setItem将QStandardItem的实例对象添加到模型中作为项。 QStandardI...

老猿Python 8154

Qt框架入门:从信号槽到跨平台部署的C++ GUI开发全指南

C++ GUI开发是构建桌面应用的核心技术之一,其关键在于选择高效、跨平台的框架。Qt作为成熟的C++应用程序框架,通过独特的信号槽机制实现对象间通信,有效降低了模块耦合度,提升了代码可维护性。其元对象系统(MOC)在标准C++基础上提供了反射能力,支撑了信号槽、动态属性等高级特性。在工程实践中,Qt的模块化设计允许开发者按需引入功能,而qmake或CMake构建系统则管理着包含MOC预处理在内的完整编译流程。对于常见的“qt安装”与“环境配置”问题,官方Qt Creator提供了开箱即用的解决方案,而VS

weixin_30336061的博客 396

PyQt(Python+Qt)学习随笔:model/view架构中类QStandardItemModel的使用方法

QStandardItemModel类用于在Model/View架构中存储自定义数据的通用模型。 QStandardItemModel可以用作标准Qt数据类型的数据存储Model。QStandardItemModel提供了一种经典的基于项的方法来处理模型中的数据。QStandardItem模型中的项对应类型必须为QStandardItem。 QStandardItemModel是QAbstract...

老猿Python 6673

使用PyQt实现model/view架构中的两种标准模型:QStandardItemModel和QFileSystemModel

最后,我们遍历整个模型,并为每个项目设置文本对齐方式。在这个例子中,我们定义了一个QFileSystemModel,并将其设置为根路径。QStandardItemModel是一个通用的表格模型,用于存储任意维度的数据。QStandardItemModel和QFileSystemModel是两个非常有用的标准模型,它们可以帮助我们快速、轻松地处理不同类型的数据。Qt提供了不同类型的标准模型来处理不同类型的数据,其中QStandardItemModel和QFileSystemModel是两种非常常用的模型。

BUG?不存在的! 360

QStandardItemModel的使用案例及Python源代码详解

通过使用QStandardItemModel,我们可以方便地创建和操作数据项,并在视图中展示数据。除了添加数据项,QStandardItemModel还提供了其他一些常用的方法,例如获取数据项的值、设置数据项的值、插入数据项、删除数据项等。在上面的代码中,我们创建了一个QStandardItemModel对象,并使用QStandardItem类创建了三个数据项。在上面的代码中,我们创建了一个QApplication对象,并初始化了一个QTableView对象。最后,我们显示了表格视图,并运行了应用程序。

BUG?不存在的! 577

PyQt(Python+Qt)学习随笔:Model/View架构中的Model模型概念

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 Model/View架构中的Model模型Model与数据源通信,为体系结构中的其他组件提供数据接口。与数据源通信的方式取决于数据源的类型(如文件、数据库、消息等)以及模型的实现方式。由于模型中的数据都是以项(item)为单位进行管理,所以Model模型又称为项模型(item models )。...

老猿Python 2333

PyQt学习笔记:使用QStandardItemModel实现Model/View架构

接下来,我们创建了一个排序按钮,并定义了一个sort_data函数,在该函数中调用了model的sort方法对数据进行排序。除了基本的数据添加和显示外,QStandardItemModel还提供了丰富的功能,如数据的排序和过滤,以满足不同的需求。在PyQt中,Model/View架构是一种常用的设计模式,用于将数据和用户界面分离,实现数据的展示和编辑。如果你对PyQt的学习还有其他疑问,欢迎继续提问。除了基本的数据添加和显示外,QStandardItemModel还提供了一些高级功能,如数据的排序和过滤。

BugCrusher的博客 344

Qt Model/View 编程深度解析报告

本文介绍了Qt框架中的Model/View架构,该架构通过分离数据与视图解决了传统GUI开发中的数据冗余和同步问题。文章首先分析了传统基于项控件的局限性,指出其数据耦合导致的维护成本上升。随后阐述了Model/View对MVC模式的改进,合并视图和控制器角色并引入委托机制,形成了Model/View/Delegate范式。 核心内容围绕三大组件展开: 模型作为数据抽象层,通过QAbstractItemModel标准接口统一访问各类数据源,提供QAbstractListModel和QAbstractTable

greenspan的专栏 2180

PyQt学习笔记:QStandardItemModel和QFileSystemModel在model/view架构中的应用

这些模型为我们提供了方便的方法来管理和操作数据,使得在PyQt应用程序中实现数据的显示和交互变得更加简单和高效。在PyQt中,model/view架构是一种常用的模式,用于实现用户界面中的数据显示和交互。在这种架构中,模型(Model)负责管理数据,视图(View)负责显示数据,而代理(Delegate)则负责处理用户的交互操作。我们通过setRootPath方法设置根目录,并使用setModel和setRootIndex方法将模型设置给树形视图,并显示根目录下的所有文件和文件夹。

Meta_C的博客 232

PyQT开发(3):PyQT文件操作与资源管理

为了使文件浏览器更加用户友好,我们可以自定义QTreeView的行为,例如,当用户点击文件时显示其内容。

kkchenjj的博客 1491

第15.23节 PyQt(Python+Qt)入门学习:Model/View架构中QListView视图配套Model的开发使用

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一、概述 QListView理论上可以和所有QAbstractItemModel派生的类如QStringListModel、QDirModel、QFileSystemModel、QStandardItemModel等对接,但QListView实际上能展示的数据仅一列,对于复杂的树形层次使用Mod...

老猿Python 2403

FPGA+滨淞CCD实战:手把手教你搭建S7031/S10142成像电路(附避坑指南)

本文详细介绍了使用FPGA驱动滨淞CCD传感器(S7031/S10142)构建高精度成像系统的完整实战流程。内容涵盖核心器件选型、系统架构规划、电路板(焦面板与接口板)设计要点、FPGA Verilog逻辑实现,并提供了从电源管理、信号调理到数据采集的详细避坑指南,帮助读者从零搭建稳定可靠的成像电路。

weixin_29271263的博客 227

python概念建模_PyQt(Python+Qt)学习随笔:Model/View架构中的Model模型概念

Model/View架构中的Model模型Model与数据源通信,为体系结构中的其他组件提供数据接口。与数据源通信的方式取决于数据源的类型(如文件、数据库、消息等)以及模型的实现方式。由于模型中的数据都是以项(item)为单位进行管理,所以Model模型又称为项模型(item models )。所有项模型(item models )类都是从基类QAbstractItemModel 类及其子类派生的...

weixin_39979489的博客 151

从谱峰搜索到多项式求根:Root-MUSIC算法原理与MATLAB实践

本文深入解析Root-MUSIC算法在阵列信号处理中的原理与应用,通过多项式求根替代传统MUSIC算法的谱峰搜索,显著提升计算效率和精度。文章详细介绍了算法核心思想、MATLAB实现步骤及工程优化技巧,帮助读者掌握这一高效的DOA估计方法。

weixin_30832143的博客 80

基于Codex平台构建AI技能:抖音爆款分析与带货视频生成实战

这次我们来看一个基于 Codex 平台构建 AI 技能(Skill)的实战项目。核心目标很直接:利用 AI 能力,自动化分析抖音平台的爆款内容,并生成可用于带货的视频。这听起来像是内容创作领域的“自动化流水线”,它解决的核心痛点是:人工分析爆款、撰写脚本、制作视频的效率瓶颈。 对于技术开发者和内容创作者而言,这个项目的价值在于将“内容策略分析”和“视频内容生成”两个环节通过 Codex 的 Skill 机制串联起来,形成一个可定制、可批量执行的自动化工作流。我们最关心的几个问题包括:这个方案的技术门槛高不高

weixin_29054399的博客 485

第15.20节 PyQt(Python+Qt)入门学习:QColumnView的作用及开发中对应Model的使用

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一、概述 在Qt Designer的Item Views(Model-based)部件中,Column View部件是一种类似树形视图的视图,不过树形视图的层次结构是纵向排列的,父节点在上,子节点在下,同时兄弟节点也是上下排列,而在Column View中,这种层级关系是通过视图中的列来体现的,...

老猿Python 3962

基于FPGA设计的信号分析仪(项目资料ID:28)

基于现场可编程门阵列(FPGA)设计的信号分析仪。该信号分析仪旨在实现对各类信号的精确分析,具备频率、幅度、相位等参数测量功能。通过采用 FPGA 作为核心处理单元,充分利用其并行处理能力和可重构特性,提高了系统的处理速度和灵活性。论文介绍了信号分析仪的总体设计方案,包括硬件电路设计和软件算法实现。

以培养嵌入式工程师为己任 1万+

PyQt(Python+Qt)学习随笔:QListView的modelColumn属性及困惑

PyQt(Python+Qt)学习随笔

老猿Python 1814

万字长文:YOLOv5+RK3588 NPU多线程加速全攻略——从理论到部署的终极优化

RK3588 NPU多线程加速优化教程摘要 本教程深入讲解了如何利用线程池技术优化RK3588 NPU上的YOLO目标检测模型推理性能。RK3588内置3个NPU核心,理论算力达6TOPS,为多线程优化提供了硬件基础。教程详细解析了线程池的核心组件(任务队列、工作线程、同步机制)和实现架构,包括类设计、初始化流程、工作线程逻辑(任务获取、NPU推理、结果存储三个阶段)以及任务提交/获取机制。通过预分配模型实例、线程绑定、流量控制等优化手段,实现了从单线程28FPS到多线程120FPS的显著性能提升,为边缘A

LXY_LOVE36的博客 1101

9.1 机器人动力学建模

目录9.1 机器人动力学建模一、机器人动力学的基本概念1. 什么是机器人动力学?2. 动力学方程二、机器人动力学建模方法1. 拉格朗日方法2. 牛顿-欧拉方法三、Simulink 中的机器人动力学建模1. 使用 Simscape Multibody 建模示例:构建一个两连杆机械臂的动力学模型。步骤:2. 使用 Robotics System Toolbox 建模示例:构建一个六自由度工业机器人的动力学模型。步骤:四、示例:两连杆机械臂的动力学建模目标:步骤:五、结果分析1. 动态响应2. 参数敏感性六、总结

xiaoheshang_123的博客 626

QStandardItemModel类

本文基于《Python Qt GUI与数据可视化编程》总结归纳

qq_35412059的博客 3300

索尼IMX316 标定_ToF模块相机校准

很多东西一开始给出去的并不是最优的方案,而是在客户端支持中,以及在持续不断的芯片验证中,发现还可以这么做,还能够再提升Sensor的性能,所以说这是一个持续的过程。曾经听说过一个故事,在某厂里ST产品一直作为第一供应商多年,然后近段时间即将被新兴公司的ToF产品所打败,性能报告已经出来,但是ST并没有更新产品,而是在原有产品更新了固件以及标定流程,此时产品的性能又是超越其他供应商的产品。相机矩阵不考虑镜头失真,因为理想的针孔相机没有镜头。为了准确地代表一个真实的相机,相机模型包括径向和切向的镜头畸变。

dream it possible 1154

python简单应用功能_python os模块简单应用示例

本文实例讲述了python os模块简单应用。分享给大家供大家参考,具体如下:举例中的目录形式如下所示:In [36]: pwdOut[36]: '/home/python/Desktop/code'In [37]: lshello.py hello.txt test.py 文件夹01/ 文件夹02/ 文件夹03/1.当前路径及路径下的文件os.getcwd():查看当前所在路径。os.listd...

weixin_39889487的博客 237

车载ECU底软测试:方法与技术的深度解析

底软是运行在 ECU 硬件平台上的基础软件,它为上层应用程序提供了硬件驱动、操作系统服务、通信协议栈等功能。底软的主要功能包括:硬件驱动:负责与 ECU 的各种硬件外设进行通信和控制,如 GPIO、UART、SPI、CAN 等。操作系统服务:提供任务调度、内存管理、中断处理等功能,确保系统的实时性和稳定性。通信协议栈:实现 ECU 与其他 ECU 或外部设备之间的通信,如 CAN、LIN、FlexRay 等。诊断服务:负责对 ECU 的故障进行诊断和处理,并将故障信息存储在故障码存储器中。

天赐好车的博客 1428

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

pyqt中的目录QFileSystemModel 内容用 QTreeView 显示

前两天做代码的时候自己实现了一个目录展示的效果,虽然有较强的扩展性,但是官方可能还是要完善一些。 经过几个小时的摸索,大概效果如下: import sys, os from PyQt5.QtWidgets import QApplication, QFileSystemModel, QTreeView, QWidget, QVBoxLayout, QDirModel from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidg

True Truth 3588

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: PyQt(Python+Qt)学习随笔:Model/View架构中的Model模型概念
下一篇: PyQt(Python+Qt)学习随笔:model/view架构中的QStandardItemModel使用案例
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值