PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法

204.PyQt5_Model-View_编程思维 首先,大家可能会有疑问,这个Model/View编程思维是个啥?和我们学习的PyQt5有什么关系其实,开始我也并不知道什么Model/View编程思维。从学完基础控件,然后学自定义信号、动画,然后就开始学习高级控件——QListView、QTableView,但是在课程中老师会一直讲到数据模型(Model),然而我并没有接触过Model,课程中也没有去介绍Model,所以我才回过头来学习一下Model。 阅读详情

对于Model/View中视图的数据编辑后怎么能实时获取编辑的数据变动位置和变动情况查阅了一些资料,终于基本弄明白必须重写Model的setData方法才能截获。setData方法是视图中各种角色数据发生更新后视图用于更新Model数据的方法,只要重写该方法就可以截获视图对Model数据的修改。

不过网上介绍的思路都是从QAbstractTableModel派生出一个自己的Model类,并实现相关方法,比较复杂。老猿还需要仔细研究这种方法的详细方式及优缺点,相关文章大部分都是基于Qt实现的,懂C++语言的理解后简单修改就能迁移到PyQt实现模式,在这推荐大家阅读优快云博友cloveses的《PyQt5使用记录之二 —— QTableView实现数据的显示、编辑、删除与添加》,这是基于PyQt介绍的。

不过老猿今天要介绍的是一种更简单的方式,那就是从PyQt已经实现的从QAbstractTableModel派生的类QStandardItemModel来派生子类,这种方式更简单,只需要重写setData方法就可以了。

步骤如下:
一、从QStandardItemModel派生子类并重写setData方法

class  UpdateItemModel(QStandardItemModel):
    def setData(self, index, value, role=Qt.EditRole):
        # 编辑后更新模型中的数据 View中编辑后,View会调用这个方法修改Model中的数据
        print(f"update {index.row()}行{index.column()}列角色为{role}的数据为:{value},初始数据为{index.data()}")
       .......#添加自己的数据处理代码
       return super().setData(index, value, role)

二、通过自定义类定义自己的存储对象
在应用中最好是应用窗口构造函数中使用如下语句:
self.tableViewModel = UpdateItemModel()

这样简单两步就实现了View更新数据的截获。

这种方法与直接从QStandardItemModel派生自定义类,当然其他的从QAbstractTableModel派生的类如QStringListModel也可以这样使用来派生自定义类。与从QAbstractTableModel派生自定义类相比该方法的优缺点还需要进一步研究,但它至少提供了一种获取更新数据进行处理的简单实现思路。


博客地址:https://blog.youkuaiyun.com/LaoYuanPython

老猿Python博客文章目录:https://blog.youkuaiyun.com/LaoYuanPython/article/details/98245036

PyQt学习笔记:用data和setData方法访问QTableWidgetItem项的数据 在PyQt中,QTableWidget控件是一个常用的表格控件,而QTableWidgetItem则是控件中的一种项,它包含了表格中每个单元格的数据。在插入数据时,我们调用了QTableWidgetItem的setData方法,将数据绑定到每个item上,并设置了item的文本。然后,我们通过调用QTableWidget的item方法,获取第一个单元格的数据,并打印出来。可以看到,在获取数据时,我们又使用了QTableWidgetItem的data方法来访问item中的数据。 阅读详情

相关推荐

PyQt学习随笔:使用Model/View实时获取视图数据项编辑变动数据的方法

其中,Model/View模式是PyQt中一个重要的概念,它允许我们根据数据模型展示数据,并支持数据的编辑操作。现在,当用户编辑单元格时,我们可以使用数据变动信号(dataChanged)和代理发送出来的commitData信号来获取编辑变动数据,进而进行相应的处理。现在,当用户编辑单元格时,我们可以使用数据变动信号(dataChanged)和代理发送出来的commitData信号来获取编辑变动数据,进而进行相应的处理。接下来,我们需要创建一个视图(QTableView),将数据模型和视图相互绑定。

code_welike的博客 430

Qt QTreewidget 获取编辑前后的文本及检测退出编辑状态

Qt QTreewidget 获取编辑前后的文本及检测退出编辑状态

ken2232的博客 927

PyQt学习笔记:在Python中设置可编辑的Model/View视图数据项

该模式将数据存储在一个模型对象中,并使用视图对象来显示和编辑该数据。在Model/View模式中,我们可以设置视图中的数据项是否可编辑,以实现数据的交互性。在本文中,我们介绍了如何在Python中使用PyQt设置可编辑的Model/View视图数据项。然后,我们通过设置编辑触发器和数据项的可编辑属性,实现了数据项的可编辑性控制。通过设置模型中的数据项的可编辑属性,我们可以实现更细粒度的控制,并根据需要设置特定数据项的可编辑性。除了设置编辑触发器外,我们还可以在模型中设置每个数据项的标志来控制其可编辑性。

TechNovaX的博客 248

Qt项目实战笔记--从零开始搭建库存管理系统(六)使用QSqlTableModel实现数据的增删改查

Qt项目实战笔记--从零开始搭建库存管理系统(五)使用QSqlTableModel实现数据的增删改查

C/C++编程指南 2123

用 PyQt 学习 Model/View 中 TableView 视图数据编辑与访问

上述代码中,我们创建了一个 QDialog 对象,并在其中新增了一个 QStandardItemModel 对象来存储数据。在模型中,我们创建了一个 4x3 的矩阵来存储数据,并将它们展示在 TableView 控件中。在 Model/View 架构中,我们可以使用 data() 方法读取 TableView 视图中的数据,使用 setData() 方法将编辑后的数据存储回模型中。接下来,我们需要设置 TableView 视图的一些属性,以实现在 TableView 中编辑数据。

持续更新 386

使用Python学习PyQt中Model/View架构下多个视图之间选择数据项同步

在PyQt中,Model/View架构是一种常用的设计模式,用于将数据和其表示分离,从而实现数据的可视化展示和编辑。在Model/View架构中,数据由Model进行管理,而视图(View)用于展示数据,并与Model进行交互。在某些情况下,我们可能需要在多个视图之间实现数据项的同步,即当一个视图中选择了某个数据项时,其他视图也会相应地更新选中状态。接下来,我们需要创建多个视图来展示这个Model中的数据,并实现视图之间的数据同步。在本例中,我们假设我们的Model管理的是一个简单的字符串列表。

ByteBuster的博客 144

qstandarditemmodel 重写data函数后无法实现拖拽_封包式游戏功能的原理与实现

本文为看雪论坛精华文章看雪论坛作者ID:鬼手56目录前言封包式功能的实现步骤定位发包函数 三大发包函数 重写发包函数 线程发包 线程发包的形态和特点 条件断点筛出心跳包 线程发包的传参方式 跳出线程发包 定位加密封包内容 线程发包总结定位明...

weixin_39685392的博客 262

PyQt学习笔记:支持视图中数据修改的Model/View设计方法与步骤

在Model/View模式中,数据由一个数据模型(Model)表示,而视图(View)负责显示数据并与用户交互。本文将介绍如何在Model/View设计中支持视图中数据的修改,并提供相应的Python源代码。通过实现自定义的数据模型和选择合适的视图类,可以实现对数据的显示和编辑。通过在数据模型中实现setData()方法,可以支持视图中数据的修改并实时更新视图的显示。在CustomModel类的setData()方法中,可以根据需要更新数据模型中的数据,并使用dataChanged信号通知视图进行更新。

CyberGenius的博客 177

QStandardItemModel

基本知识 类QabstractItemModel,QabstractListModel,QAbstractTableModel不保存数据,用户需要从这些类派生出子类,并在子类中定义某种数据结构来保存数据。与此不同,类QStandardItemModel负责保存数据,每个数据项被表示为类QStandardItem的对象。QStandardItem用来保存一个数据项,再使用QStandardItem...

bluewhu的博客 9105

保姆级教程:在RK3588开发板上编译带MPP硬件加速的FFmpeg(含完整依赖库配置)

本文提供在RK3588开发板上编译支持MPP硬件加速的FFmpeg的详细教程,涵盖交叉编译环境搭建、MPP框架及依赖库配置,最终实现4K视频硬件编解码性能优化。通过实战步骤和性能对比,展示如何充分发挥RK3588的硬件加速能力。

weixin_30839881的博客 418

保姆级教程:在Windows/Linux双系统下搞定Microsemi Libero SoC v11.8安装与白银版License激活

本文提供了一份详细的Microsemi Libero SoC v11.8在Windows/Linux双系统下的安装与白银版License激活指南。涵盖环境准备、安装流程、License跨平台配置及常见问题排查,帮助开发者高效搭建FPGA开发环境。

weixin_30603633的博客 420

PyQt学习随笔:Model/View中设置视图数据项可编辑的方法

在视图对象中调用setEditTriggers方法可以设置视图对象中的数据项是否可编辑以及编辑的触发方法。 setEditTriggers方法是QAbstractItemView的方法,语法如下: setEditTriggers(QAbstractItemView.EditTriggers triggers) 其中参数QAbstractItemView.EditTriggers triggers为...

老猿Python 2667

CentOS8静默安装Oracle11.2.0.1

背景 新安装oracle,用静默安装方式就不需要安装图形界面了,省时省力。 前期准备工作与图形化安装一样,如创建用户|用户组、环境变量、内核参数、创建目录等. 可参考图形化安装,链接:https://blog.youkuaiyun.com/heroicpoem/article/details/104229369 环境 平台 版本 操作系统 centOS 8 Oracle 11gR2 1.响应文件 响应文件的内容就是图形化安装时手工设置的选项内容。 解压后,database/response/db

heroicpoem的专栏 4518

PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项

根据《PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法》可以重写从PyQt的Model类继承的setData方法来实时截获View中对数据的更改,但需要注意,setData方法调用不光发生在View中实际存储的内部数据修改,也可能是其他与数据相关的属性或值调整,如数据项的checked变化,数据的对齐风格变化等。 因此如果应用需要响应数据的变化实时做出反应而重写se...

老猿Python 2649

新手必看!手把手教你如何在飞牛NAS上玩转Docker容器!(飞牛Nas(fnOS)如何创建Docke容器以及Compose部署项目)

新手必看!手把手教你如何在飞牛NAS上玩转Docker容器!(飞牛Nas(fnOS)如何创建Docke容器以及Compose部署项目)

XiaoqiangClub的博客 1万+

利用RFIDIOt和NFC进行Hitag2密码暴力破解: Python代码实现

RFID即无线射频识别,是一种通信技术,可以通过无线电信号读取、捕获和保存终端上的信息。这项技术在物流、零售、医疗等领域有着广泛的应用。NFC即近场通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输。Hitag2是一种常见的RFID标签,广泛应用于汽车防盗系统、门禁系统等。由于其安全性在过去被广泛认可,很多设备都采用了这种标签。但近年来随着密码破解技术的发展,Hitag2的安全性受到了一些挑战。

qq_38334677的博客 1561

PyQt学习随笔:Model/View中诸如DisplayRole的数据角色及含义

在PyQt中,模型可以针对不同的组件(或者组件的不同部分,比如按钮的提示以及显示的文本等)提供不同的数据。例如,Qt.DisplayRole用于视图的文本显示。通常来说,模型中的数据项包含一系列不同的数据角色,数据角色定义在 Qt.ItemDataRole 枚举中,包括下列枚举值: Qt.DisplayRole:文本表格中要渲染的关键数据 Qt.EditRole:编辑器中正在编辑的数据 Qt.To...

老猿Python 7405

16、树莓派Pico W:蓝牙与Wi-Fi应用指南

本文介绍了树莓派Pico W在蓝牙与Wi-Fi通信方面的应用,涵盖蓝牙配对原理、使用HC-06模块实现手机远程控制LED和传输内部温度,以及通过Wi-Fi进行网络连接、扫描和UDP协议下的设备控制。文章包含详细电路连接、代码实现与测试步骤,并提供拓展建议、常见问题解决方法及开发注意事项,帮助读者快速掌握基于Pico W的无线通信项目开发,适用于物联网入门与实践场景。

sun99的博客 289

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

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

老猿Python 3777

agent-browser 安装笔记(OpenClaw)

【代码】agent-browser 安装笔记(OpenClaw)

tiantiantbtb的博客 1241

C#从入门到精通(35)—如何防止winform程序因为误操作被关闭

我们在开发的上位机软件运行起来以后,一般在右上角都有一个关闭按钮,正常情况下点击关闭按钮就能关闭软件,但是不排除我们不想关闭软件,但是因为不小心把鼠标点到了关闭按钮,如果这是一个正在生产的机器,突然关闭软件可能会导致产品损坏,那么我们如何去解决这个误操作的问题呢,本文就来讲解解决方案!

qq_34059233的博客 678

PyQt(Python+Qt)学习随笔:Model/View架构概述

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一、引言 模型-视图-控制器(Model-View-Controller,简称MVC)是一种源于Smalltalk在构建用户界面时 广泛使用的设计模式。在《Design Patterns》一书中,Gamma等人这样描述到:“MVC由三种对象组成。模型Model是应用程序对象,视图View是其屏...

老猿Python 2027

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

PyQt学习随笔:Model/View中TableView视图数据项编辑结果及视图数据项的访问

按照《PyQt学习随笔:Model/View中设置视图数据项可编辑的方法》的方法支持视图数据可编辑后,编辑后的数据无需主动保存,PyQt会自动将界面变更的数据保存到对应的Model存储中,如果知道变化数据所在的行和列,就可以对该数据进行访问,访问方法是先通过行和列得到数据的Index,然后通过Index访问对应数据值。如: i = self.tableViewModel.index(1,1) ...

老猿Python 1519

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

PyQt4学习笔记2】Qt 的 Model/View 架构

文章详细介绍了Qt 的 Model/View 架构

look_outs的博客 1750

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

PyQt(Python+Qt)学习随笔:model/view架构中的QStringListModel

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一、QStringListModel介绍 QStringListModel是Qt提供的一个已经实现QAbstractItemModel相关接口的Model,适合于展示一系列字符串的简单视图如QListView对象和QComboBox对象。 QStringListModel提供了所有可编辑模型的标...

老猿Python 2342

第15.18节 PyQt(Python+Qt)入门学习:Model/View架构中视图Item Views父类详解

一、概述 在PyQt图形界面中,支持采用Model/View架构实现数据和界面逻辑分离,其中Model用于处理数据存储,View用于界面数据展现,当Model中的数据变化后对应界面视图自动更新,反之当View中数据进行修改之后,也支持通知Model进行数据调整。 为了快速支持Model/View架构,PyQt提供了一系列类来支持,在Qt Designer中Item Views部件栏的视图部件都是用...

老猿Python 2204
上一篇: Python综合知识随笔
下一篇: PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项
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、付费专栏及课程。

余额充值