news 2026/6/23 9:02:30

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

作者头像

张小明

前端开发工程师

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

ySide6/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_product

if 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"},

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 5:34:08

通过命令模拟pod创建

篇文章主要涉及到 kubelet 通过 csi 向运行时发送创建请求,运行时发生了什么?pod 网络又是怎么连通的?对应的流量图画板我们将使用 docker 和 linux Bridge 去完成这个 pod 需求流程描述kubelet 通过 CRI 接口调用运行时(如 conta…

作者头像 李华
网站建设 2026/6/23 17:09:26

同步机无感 STM32 低成本 MD500E 永磁同步控制方案大揭秘

同步机无感 STM32低成本MD500E永磁同步控制方案,pmsm,高性价比变频器参考方案 md500e三电阻采样,移植了500e的永磁同步电机控制的关键代码,实现了精简版500e,默认电位器调速,用了一种优化的无感磁链观测器f…

作者头像 李华
网站建设 2026/6/19 15:51:22

小宝玩具 【通达信、源码 、主图、附图】

{}RSV:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; K:SMA(RSV,3,1); D:SMA(K,3,1); DIFF: EMA(CLOSE,12) - EMA(CLOSE,26); DEA :EMA(DIFF,9); MACD:2*(DIFF-DEA); 做多:IF(K>D AND MACD>0 AND V>1,2,0),COLORRED; 做空:IF(K<D AND MACD<0 AND V>1,-2…

作者头像 李华
网站建设 2026/6/23 17:52:16

使用 Github Pages 和 Hexo

截图&#xff1a;baby7.github.io首页截图下面说一下优缺点&#xff0c;主要对比的是购买服务器搭建个人博客。优点&#xff1a;不需要买服务器使用Github Pages的服务器&#xff0c;只需要建一个github仓库&#xff0c;然后往里面放html文件就可以了&#xff0c;不需要去买服务…

作者头像 李华
网站建设 2026/6/23 14:07:52

线性代数:多维世界的变形工具箱

线性代数这仨字&#xff0c;一听就很“大学数学课本味儿”&#xff1a; 上课&#xff1a;黑板上全是矩阵、行列式、特征值 λ下课&#xff1a;作业里全是高斯消元、求逆矩阵考试&#xff1a;背公式 套套路&#xff0c;心想“我以后真的会用到这玩意儿吗&#xff1f;” 但你要是…

作者头像 李华