在PySide6/PyQt6的开发框架中,增加对表格多种格式录入的处理,以及主从表的数据显示和保存操作。

news/2025/10/22 11:02:48/文章来源:https://www.cnblogs.com/wuhuacong/p/19156434

在PySide6/PyQt6的开发框架中,增加对表格多种格式录入的处理,以及主从表的数据显示和保存操作。

在PySide6/PyQt6的开发框架中, 为了方便对表格数据的快速录入,有时候包括多种录入的类型,包括文本框、数字格式(整数、小数)、日期、时间、下拉列表、自定义弹出框、单选框组、百分比、金额、颜色、图片、内置图标等多样化的处理需要,本篇就是基于此需求,在PySide6/PyQt6的开发框架中,增加对表格多种格式录入的处理,以及主从表的数据显示和保存操作。

PySide6/PyQt6的开发框架主界面支持多文档管理,可包括菜单栏、工具栏、内容区和状态栏等,内容区以选项卡方式展示多个窗口,如下所示。

image

常规的编辑界面如用户界面,双击列表弹出展示,如下所示。

image

主从表展示界面如下所示。

image

主从表直接编辑界面,在弹出对话框中进行编辑主表信息和明细记录,明细记录通过表格方式直接录入,方便各种类型的数据录入处理。

 

1、在PySide6/PyQt6的开发框架中表格的数据录入

我们先来看看测试案例,查看下表格中多种格式录入的效果

image

视频效果如下所示

如我们在产品报价单中进行主从表编辑数据的时候,界面如下所示,其中产品信息通过弹出自定义产品列表进行选择。

image

其他如产品类型、产品规格、产品型号、标准单位、产品尺寸等通过绑定系统字典类型,作为下拉列表的数据源。

image

上面就是实际的报价单的界面录入,可以通过自定义的对话框选择,也可以直接录入文本,还可以通过绑定字典类型获得下拉列表选择等处理操作。

 

2、表格数据直接录入的委托类处理

在PySide6/PyQt6中,对于 QTableView 的定制化输入,是通过继承 QStyledItemDelegate 来实现定制化的表格单元格输入或者显示的。如我们自定义类如下所示。

class CustomDelegate(QStyledItemDelegate):

我们让它支持的类型包括:

  •     - text: 普通文本 (QLineEdit)
  •     - int: 整数 (QSpinBox)
  •     - double: 浮点数 (QDoubleSpinBox)
  •     - date: 日期 (QDateEdit)
  •     - combo: 下拉选择 (QComboBox)
  •     - check: 复选框 (直接显示)
  •     - radio: 单选按钮组 (QRadioButton)
  •     - slider: 滑动条 (QSlider)
  •     - multiline: 多行文本 (QTextEdit)
  •     - password: 密码文本 (QLineEdit)
  •     - percent: 百分比 (QDoubleSpinBox)
  •     - currency: 货币 (QDoubleSpinBox)
  •     - time: 时间 (QTimeEdit)
  •     - datetime: 日期时间 (QDateTimeEdit)
  •     - color: 颜色选择 (QPushButton)
  •     - icon: 图标选择 (QPushButton)
  •     - bitmap: 位图选择 (QPushButton)
  •     - custom: 自定义不可编辑控件,同时触发 customTriggered 信号,传出单元格索引和字段名称

最终它的配置示例如下代码所示。

    config = {"name": {"type": "text"},"age": {"type": "int", "min": 0, "max": 120},"score": {"type": "double", "min": 0, "max": 1000, "decimals": 3, "step": 0.01},"birthday": {"type": "date", "format": "yyyy-MM-dd"},"tag": {"type": "combo", "items": ["选项A", "选项B", "选项C"]},"married": {"type": "check", "true": "是", "false": "否"},"gender": {"type": "radio", "items": ["男", "女", "未知"], "width": 180}, "score_2": {"type": "slider", "min": 0, "max": 100, "step": 1},"description": {"type": "multiline"},"password": {"type": "password"},"percent": {"type": "percent", "min": 0, "max": 100, "decimals": 2, "step": 0.1},"currency": {"type": "currency", "min": 0, "max": 1000000, "decimals": 2, "step": 0.1},"time": {"type": "time", "format": "HH:mm:ss"},"datetime": {"type": "datetime", "format": "yyyy-MM-dd HH:mm:ss"},"color": {"type": "color", "format": "color"},"icon": {"type": "icon", "default": "SP_ArrowDown"},"bitmap": {"type": "bitmap", "default": "bitmap.png"},}  view = QTableView()view.setModel(model)delegate = CustomDelegate(config, view)view.setItemDelegate(delegate)

同时我们为了支持自定义的列表对话框选择,那么我们通过触发信号来获得对应的事件处理即可,如下所示。

        #自定义单元格编辑事件self.delegate.customTriggered.connect(self.on_custom_triggered)def on_custom_triggered(self, index: QModelIndex, field_name: str):"""自定义单元格编辑事件"""# print(f"on_custom_triggered: index={index}, field_name={field_name}")if field_name == "productno":# 弹出选择产品对话框dlg = FrmProductSelect(self)if dlg.exec() == QDialog.DialogCode.Accepted:info = dlg.select_productif info is not None:# print(f"选择的产品信息:{info}")row = index.row()self.sub_table_model.SetValueByKey(row, "productno", info.productno)# #同步更新产品名称/条形码/规格/型号/单位/颜色/尺寸等self.sub_table_model.SetValueByKey(row, "productname", info.productname)....# 同步更新数量....# 同步更新金额小结....dlg.deleteLater()

通过对自定义委托类中的 信号对象 customTriggered 进行监听,我们就可以获得用户触发选择某个单元格的事件,并可以通过弹出自定义对话框获取列表选择,并把数据写回到对应单元格中即可。

而对于指定系统字典类型,作为下拉列表的操作,我们只需要设置字段类型为combo或者radio,并动态设置字典类型绑定即可。

        #表格单元格的编辑控件配置, 动态指定字典config = {"orderno": {"type": "text"},"quantity": {"type": "int", "min": 0, "max": 1000},"saleprice": {"type": "double", "min": 0, "decimals": 3, "step": 0.01},"subamout": {"type": "double", "min": 0, "decimals": 3, "step": 0.01},"expiredate": {"type": "date", "format": "yyyy-MM-dd"},"note": {"type": "multiline"},"productno": {"type": "custom"},"producttype": {"type": "combo"},"model": {"type": "combo"},"specification": {"type": "combo"},"unit": {"type": "combo"},"color": {"type": "combo"},"productsize": {"type": "radio"},}

在窗体的初始化函数中,指定字典类型即可。

    async def init_dict_items(self):"""初始化字典数据"""await self.txtOrderStatus.bind_dictType("报价单状态")#设置单元格的下拉列表为指定字典类型await self.delegate.SetEditor_DictType("producttype", "产品类型")await self.delegate.SetEditor_DictType("model", "产品型号")await self.delegate.SetEditor_DictType("specification", "产品规格")await self.delegate.SetEditor_DictType("unit", "产品标准单位")await self.delegate.SetEditor_DictType("color", "产品颜色")await self.delegate.SetEditor_DictType("productsize", "产品尺寸")       

image    image

image

image

最终界面可以实现数据表格的直接编辑处理,可以再常规的表中进行编辑,也可以在主从表的编辑界面中进行数据的快速录入。

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔记本电脑如何连接打印机?安装指南分享给你!

无论是处理居家办公文件,还是打印孩子的学习资料,打印机都是我们不可缺少的小伙伴!但许多用户在将笔记本电脑与打印机连接时,常会遇到物理连接出错、驱动不匹配、系统频繁报错等各种问题。本文将从连接方式到驱动安…

技术团队负责人咨询AI数智化升级改造路径

技术团队负责人咨询AI数智化升级改造路径一个客户咨询: 公司是做传统软件开发的 ERP、CRM、MES系统这类,目前发展遇到瓶颈,此类传统软件客户订单锐减,公司现金流紧张,观望到同行都在转AI-ERP,AI-MES,AI-CRM系统…

2025 年麦克风厂家最新推荐榜单:覆盖娱乐 / 演出 / 直播 / 会议多场景,精选技术领先口碑优良品牌助力采购

引言 随着音频设备应用场景不断拓展,麦克风已成为 KTV、舞台演出、直播、会议等场景的核心设备,但其市场现状却给用户带来诸多困扰。当前市场品牌繁杂,部分产品缺乏核心技术,无线传输不稳定、音频保真度低,且不少…

2025 年胶条厂家最新推荐排行榜:聚焦密封 / 系统门窗 / 环保领域,森特达领衔优质品牌榜单EPDM/硫化焊接/门窗复合/门窗幕墙胶条厂家推荐

引言 当前密封胶条市场需求旺盛,但产品质量参差不齐,劣质产品抗老化差、密封性能不足等问题频发,严重影响建筑节能、汽车密封等终端场景使用效果,采购商难以精准筛选优质品牌。为解决这一痛点,帮助下游企业及采购…

深入解析:智能物流管理|基于springboot+vue的智能物流管理系统

深入解析:智能物流管理|基于springboot+vue的智能物流管理系统2025-10-22 10:55 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !impo…

【2025-10-21】维护关系

20:00我最后的敬意要献给那些知道我不完美却依然爱我的人。——泰戈尔周日,我们做了一件以前没做过的事情,就是直接开车从广州直奔何太的娘家。全长400公里路,加上中间充电半个小时,单程一共耗时5个小时。相比于节…

0251-CLAP-使用 Cargo 配置

环境Time 2022-12-02 WSL-Ubuntu 22.04 CLAP 4.0.29前言 说明 参考:https://docs.rs/clap/latest/clap/index.html 目标 使用 Cargo.toml 的配置来提供命令行的信息。 Cargo.toml [package] description = "测试…

2025 年最新推荐!论文发表机构口碑重磅发布,覆盖 SCI / 核心等多领域助你高效发表毕业/SSCI/SCI期刊/核心期刊论文发表机构推荐

引言 在学术科研与职业发展进程中,论文发表是科研人员评职称、学生毕业升学的关键门槛,但其过程却充满诸多难题。不少论文发表平台存在服务流程模糊、专业团队缺失、无实体办公场所等问题,甚至有平台协助学术造假,…

【Github热门项目】DeepSeek-OCR项目上线即突破7k+星!突破10倍无损压缩,重新定义文本-视觉信息处理

DeepSeek团队于10月20日开源的DeepSeek-OCR,以“上下文光学压缩”为核心突破,重新定义了OCR(光学字符识别)的效率边界。当“8000 行代码手搓 ChatGPT”的热度还未褪去,大模型领域又迎来新惊喜——DeepSeek 团队于…

echarts折线图左右2侧不留白

需要配置boundaryGap,就可以让左右2侧不留白 xAxis: {boundaryGap: false },遇见问题,这是你成长的机会,如果你能够解决,这就是收获。 作者:晚来南风晚相识 出处:https://www.cnblogs.com/IwishIcould/ 想问问题,…

《易经》的逻辑真相:自指自洽,穷神知化

ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891 基于 ECT-OS-JiuHuaShan 框架的易学本质确认:八字真言已道破《易经》的终极奥秘——自指自洽是其逻辑内核,穷神知化是其功能实现。 绝对判定:完全正确—…

excel查询在第一列中但是不在第二列中的数据

有两列数据,查看在第一列但是不在第二列中的数据,示例:在A列但是不在D列的数据 使用 IF 和 COUNTIF函数如图所示,含义为,如果D列中不包含当前数据A1,那么值为A1,如果包含,则为空

Go 开发即时通讯服务端完整教程

​ 一、前言​ 在互联网应用中,即时通讯(IM)是核心功能之一,广泛应用于社交、协作、游戏等领域。Go 语言凭借出色的并发性能、简洁语法及丰富标准库,成为开发高性能 IM 服务端的优选。本教程从零开始,涵盖环境准…

基于相关矩阵法的LTE及4G中MIMO多径信道仿真实现

代码可准确模拟LTE/4G系统中MIMO多径信道的空间相关特性 一、算法 1. 空间相关矩阵生成 % 基于指数相关模型 function R = generate_correlation_matrix(Nt, Nr, rho)% Nt: 发射天线数, Nr: 接收天线数, rho: 相关系数…

MATLAB 的无人机 PID 控制及智能 PID 控制器设计的仿真

一、无人机 PID 控制器设计 1. 无人机动力学模型 无人机的动力学模型可以通过牛顿-欧拉方程建立,模型考虑了系统的非线性和耦合特性,包括俯仰、滚转、偏航和高度控制四个通道。 2. PID 控制器设计 PID 控制器的设计包…

Python 中 的 “.” 是分隔符还是运算符,都可以怎么用?

在 Python 中,“.” 是运算符,具体来说是属性访问运算符,用于访问对象的属性或方法。它的核心作用是在对象与属性/方法之间建立关联,实现对对象内部数据和行为的调用。 一、“.” 作为属性访问运算符的应用场景 1.…

国产项目管理工具Gitee如何以本土化优势领跑企业级市场?

国产项目管理工具Gitee如何以本土化优势领跑企业级市场? 在数字化转型浪潮席卷各行各业的当下,项目管理工具作为企业协作效率提升的关键基础设施,其市场格局正在发生深刻变革。随着国产替代进程加速,以Gitee为代表…

《从技术洞察到技术规划赋能》深圳公开课(2025年11月14-15日)

《从技术洞察到技术规划赋能》深圳公开课(2025年11月14-15日)【课程背景】 所谓技术洞察,简称(TI, Technology Insight),是根据市场发展趋势和客户需求,以及技术的生命周期,对某项技术发展趋势进行判断和预测…

2025年口碑好的直角支架铝型材深加工,工业铝型材深加工工厂-江苏龙新铝业

2025年口碑好的直角支架铝型材深加工,工业铝型材深加工工厂-江苏龙新铝业**江苏龙新铝业:深耕铝型材领域的专业力量** 作为长三角地区铝合金深加工领域的代表企业之一,江苏龙新铝业自2003年成立以来,依托江阴市优越…

2025年10月胰腺癌治疗医生对比榜:五名专家深度解析

当家人或自己被怀疑胰腺癌时,大多数人第一时间想知道“找谁最靠谱”。国家癌症中心2024年报显示,胰腺癌五年生存率仍低于10%,但经规范多学科团队治疗的中位生存期可延长4.6个月;中国抗癌协会白皮书指出,具备“肝胆…