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

【Python】PyQt5-2 在前面的章节中,我们已经深入了解了 PyQt5 的核心基石、基础控件以及事件处理和自定义绘图的强大能力。然而,现代应用程序往往需要处理和展示大量结构化数据,并提供复杂的用户交互。本章将带您进入 PyQt5 的高级 UI 组件领域,特别是其强大的模型/视图 (Model/View) 架构,这是一种在数据与视图之间实现解耦的卓越设计模式。我们将从理解其核心概念开始,逐步掌握如何使用 、、 等视图组件来展示数据,以及如何利用 和 等模型来管理数据,并最终探索其他高级容器和实用组件,如 、 和标准对话框。在构建 阅读详情

一、引言

QStandardItemModel有两种构造方法:

  • QStandardItemModel(QObject parent = None):直接创建一个模型实例,数据未进行初始化,可以通过setItem将QStandardItem的实例对象添加到模型中作为项。
  • QStandardItemModel(int rows, int columns, QObject parent = None):直接创建一个模型实例,包含有rows行columns列的空项。这些项可以通过model的index方法获取后,通过QModelIndex的setData方法进行数据修改。当模型中存储实际数据少于指定的行或列时,多出部分显示空数据。

第一种方法因为项是逐项添加,并且在添加过程中构造了QStandardItem项,这个好理解。第二种方法直接指定行数和列数,是否就自动生成项了呢?我们来做个验证。

二、验证QStandardItemModel(int rows, int columns, QObject parent = None)是否存在项

2.1、验证步骤

2.1.1、创建指定行数和列数的QStandardItemModel模型并与视图关联

在视图的构造方法中添加创建模型的代码,示例语句:

self.model = QStandardItemModel(10, 3)
self.tableView.setModel(self.model)

此时运行代码,界面初始如下:
在这里插入图片描述

2.1.2、在界面视图创建一个鼠标双击的信号和槽的连接

在Designer中进入信号编辑界面创建信号和槽连接,如图:
在这里插入图片描述

2.1.3、在界面派生类中实现槽方法

为了观察相关项的情况,在槽方法中输出相关观察数据,示例代码:

    def doubleClickView(self,index):
        row,col = index.row(),index.column()
        print(f"doubleClickView index info:\nindex={index},row,col={row},{col}")
        self.showItemInf(row,col)

上述代码中index为鼠标双击信号传递过来的QModelIndex的项索引,指向Model中具体点击对应的项,该索引中包含项所在的行和列以及父节点等信息。方法showItemInf展示项相关的信息。具体实现代码如下:

 def showItemInf(self,row,col):
        item = self.model.item(row, col) #调用model的item方法获取项
        if item:
            itemData = item.data() #获取项对应的文本
            itemIndex = item.index()  #获取项对应的索引
        else:
            itemData = None
            itemIndex = None

        print(f"item={item},itemData={itemData},itemIndex={itemIndex}")
        index = self.model.index(row,col) #调用model的index方法获取行和列对应项的索引
        if index:indexData = index.data() #获取索引对应项的文本
        else:indexData = None
        print(f"index={index},indexData={indexData}")

2.1.4、运行代码,输出相关信息

运行后,鼠标双击视图中的项,如双击第1行第1列的项,上述代码输出如下信息:

doubleClickView index info:
index=<PyQt5.QtCore.QModelIndex object at 0x0000000003DB57B8>,row,col=0,0
item=None,itemData=None,itemIndex=None
index=<PyQt5.QtCore.QModelIndex object at 0x0000000003E5D128>,indexData=None

从上述输出信息可以得出如下结论:

  • 鼠标双击传递的QModelIndex参数与通过行和列获取的QModelIndex实例不是同一个对象,但他们指向的数据相同
  • 通过模型的item方法按指定行和列获取数据项,返回结果为None,即模型使用带行和列的参数创建后,实际上没有对应的项
  • 虽然没有项,但模型索引并不为None,老猿认为这表明模型索引只是一个指向model中对应数据位置的索引,并不指向真正存储的数据,但应该在模型索引中包含指向对应项数据的信息,用于获取对应数据

老猿Python,跟老猿学Python!

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

相关推荐

PyQt学习笔记:QStandardItemModel的使用注意事项(Python)

QStandardItemModel是PyQt中常用的一个模型类,用于在Qt应用程序中显示和编辑数据。在本篇文章中,我们将介绍QStandardItemModel的一些使用注意事项,并提供相应的源代码示例。综上所述,本篇文章介绍了QStandardItemModel的使用注意事项,并提供了相关的源代码示例。通过学习和实践,您可以更好地理解和应用QStandardItemModel来管理和展示数据。通过上述方法,我们可以在QStandardItemModel中实现更复杂的数据操作和展示需求。

code88888的博客 613

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

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

老猿Python 6673

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

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

BugCrusher的博客 344

PyQt5快速入门(四)PyQt5高级窗口组件

PyQt5快速入门(四)PyQt5高级窗口组件 一、QTableView 1、QTableView简介 QTableView可以使用自定义的数据模型来显示内容,通过setModel绑定数据源,由QAbstractItemView类定义的接口来实现,使其能够显示由QAbstractItemModel类派生的模型提供的数据。 2、标准模型 QStringListModel 字符串链表数据模型QS...

cdqvkn73338的博客 1703

PyQt学习随笔:QStandardItemModel数据项初始化的两种方法

在上面的示例中,我们首先创建了一个QStandardItemModel对象,然后创建了三个QStandardItem对象item1、item2和item3,并分别设置它们的文本内容。接下来,我们使用两个嵌套的for循环遍历data列表,并在每个循环中创建一个QStandardItem对象,并使用setItem()方法将其添加到指定的行和列。我们可以将数据项的文本内容存储在一个二维列表中,然后使用QStandardItemModel的setItem()方法和for循环来批量添加数据项。

HackQuestR的博客 289

深入浅出:.sh文件在Linux系统中的实战应用与技巧

本文深入浅出地介绍了.sh文件在Linux系统中的实战应用与技巧。从基础概念入手,详细讲解了Bash脚本的运行方法、权限管理,并通过编写自动化备份脚本等实例,展示了如何利用Shell脚本提升工作效率。文章还涵盖了脚本调试、错误处理以及函数、参数解析等进阶技巧,帮助读者从入门到精通,掌握这一强大的自动化工具。

weixin_29243279的博客 349

PyQt(Python+Qt)学习随笔:QStandardItemModel指定行和列创建模型后的数据项初始化的两种方法

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QStandardItemModel通过构造方法 QStandardItemModel(int rows, int columns, QObject parent = None)创建的模型实例,包含有rows行columns列的空项。这些项不但没有数据,而且通过模型的item(row, col)...

老猿Python 1937

Armbian 国内源一键配置:告别卡顿,加速软件更新

本文详细介绍了如何为Armbian系统配置国内软件源,以解决默认国外源导致的更新缓慢、连接超时等问题。通过手动修改配置文件或使用高效的一键换源脚本,可将源切换至清华大学、阿里云等国内镜像站,实现apt更新与软件安装速度的质的飞跃,让Armbian开发体验更加流畅高效。

weixin_29215815的博客 243

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

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一、PyQt中的标准模型 PyQt和Qt提供了两个标准模型QStandardItemModel和QFileSystemModel。QStandardItemModel是一个多用途模型,可用于表示列表list、表table和树tree类型视图所需的各种不同数据结构,模型可以保存数据项。QFileS...

老猿Python 2612

搭建微信机器人的方案都在这了!

功能超级强大,虽不支持二次开发,但已有的功能足够个人使用,可惜官方作品已被腾讯告死,好在市面上还流落着不少破解版,有需要的自行搜索。可惜的是,微信官方已不准许新的微信号再使用 web 登录,这就直接从源头扼杀了 web 协议的微信机器人,虽说老的微信号还是能凑合着用,不过部分功能也受限。所以,这些都属于 PC 端的微信机器人。无论是 PC 端还是手机端,用 hook 方式实现的最大缺点就是要和某一个版本的微信客户端进行绑定,如果框架本身不对最新版本的微信适配,那使用的时候就无法升级到最新版本的微信。

weixin_47246330的博客 1万+

把业务变化变成实时流动:SAP Event Mesh 的概念、能力与落地方法

SAP Event Mesh 是 SAP BTP 上的云消息与事件服务,通过异步事件通信实现系统解耦。核心功能包括:1)提供Topic(广播)和Queue(持久化)两种消息模式;2)支持AMQP、MQTT、REST等多种协议接入;3)作为SAP生态的事件枢纽,可与SAP Integration Suite、CAP框架等无缝集成。典型应用场景:S/4HANA业务事件驱动流程、微服务扩展、IoT设备数据上云等。相比同步调用,它能显著提升系统弹性,避免雪崩故障,特别适合需要实时性与松耦合的企业级集成。高级版本(A

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 250

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

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

老猿Python 2333

TIA西门子博途V19安装教程及注意事项

TIA西门子博途V19安装教程及注意事项

Robot_PLC_HMI_Automation 1万+

PyQt(Python+Qt)学习随笔:Model中项的标记flags取值及枚举类型Qt.ItemFlag

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在Model中的项可以通过flags()方法查询对应项是否能被选择、拖拽或其他操作,对应的返回值类型为枚举类型Qt.ItemFlag及该枚举类型通过OR操作组合起来的类型Qt.ItemFlags。Qt.ItemFlag的取值及含义如下: 可以通过setFlags(Qt.ItemFlags fl...

老猿Python 6184

【如何学习CAN总线测试】——Python+Robot Framework框架实现UDS诊断自动化

由于项目需要进行UDS诊断测试,所以对这方面进行了研究学习,网上很少能查询到相关资料,故记录一下UDS自动化测试开发过程,由于保密原则,案例都是Demo,希望能帮到感兴趣的朋友。

测试领域技术分享 7467

时间序列分析(Time Series Analysis) 原理与代码实例讲解

时间序列分析(Time Series Analysis) - 原理与代码实例讲解 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 关键词:时间序列预测,ARIMA模型,状态空间模型,SARIMA模型,机器学习

AI天才研究院 1248

PyQt(Python+Qt)学习随笔:Model/View中的枚举类 Qt.MatchFlag的取值及含义

枚举类 Qt.MatchFlag描述在模型中搜索项时可以使用的匹配类型。

老猿Python 6589

AUTOSAR CP R18-10 架构总览与导航

AUTOSAR CP R18-10 架构总览 本文档系统整理了AUTOSAR CP R18-10版本的199篇技术规范,涵盖7大架构层级: 应用层(15篇):包含车身舒适、底盘控制、HMI、安全系统、动力系统等AI应用 RTE(1篇):虚拟功能总线规范 服务层(159篇):细分为系统服务(OS/ECU管理/加密)、存储服务、通信服务(CAN/LIN/Ethernet) ECU抽象层(20篇):I/O与通信硬件抽象 MCAL(41篇):微控制器驱动层 复杂驱动(14篇):CDD设计与SPAL支撑 规范模板(2

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 722

第15.22节 PyQt(Python+Qt)入门学习:Model/View架构详解

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一、简介 在PyQt和Qt中,Model/View架构是图形界面开发时用于管理数据和界面展现方式的关系。由该体系架构引入的功能分离使得开发人员能够更灵活地定制展现数据项的呈现方式,并提供标准模型接口支持广泛的数据源与预定义好的项视图(item views)一起使用。 二、Model/View架构...

老猿Python 3777

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

冻结表格列PyQt

QT有个官方的例子:Frozen Column Example,在Qt Creator例子查找即可。根据C++和python版,自己实现了python版的,完善部分功能。不过官方python版应该是机器直接翻译的C++版的,代码都不正常。

坤仔的专栏 2137

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

第15.25节 PyQt(Python+Qt)入门学习:Model/View开发实战--使用QTableView展示Excel文件内容

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一、概述 在前面的订阅专栏《第十九章、Model/View开发:QTableView的功能及属性》及公开博文《第15.24节 PyQt(Python+Qt)入门学习:Model/View架构中QTableView的作用及属性详解》中介绍了QTableView的主要功能及属性,本节来使用QTabl...

老猿Python 3856

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python tableview控件显示excel数据_第15.25节 PyQt(Python+Qt)入门学习:Model/View开发实战--使用QTableView展示Excel文件内容...

一、概述在前面的订阅专栏《第十九章、Model/View开发:QTableView的功能及属性》及公开博文《第15.24节 PyQt(Python+Qt)入门学习:Model/View架构中QTableView的作用及属性详解》中介绍了QTableView的主要功能及属性,本节来使用QTableView与QStandardItemModel配套来开发一个简单的Excel文件展示程序。之所以使用QS...

weixin_39621427的博客 1322

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

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1、案例说明 在应用中展示指定目录的图标文件的文件名和图标,界面就是一个简单的窗口上面放置一名为listView的列表视图,在视图中展示这些文件名和图标。 2、在界面派生类中定义模型并将模型和视图关联 class mainWindow( QtWidgets.QWidget,ui_listView...

老猿Python 1456

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

PyQt(Python+Qt)学习随笔

老猿Python 1814

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

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

老猿Python 3962
上一篇: 第15.24节 PyQt(Python+Qt)入门学习:Model/View架构中QTableView的作用及属性详解
下一篇: PyQt(Python+Qt)学习随笔: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、付费专栏及课程。

余额充值