WxPython跨平台开发框架之主从表展示和录入的界面处理--产品报价单和明细记录的处理

news/2025/10/16 10:55:01/文章来源:https://www.cnblogs.com/wuhuacong/p/19143692

WxPython跨平台开发框架之主从表展示和录入的界面处理--产品报价单和明细记录的处理

我们在前面随笔《Vue3+ElementPlus的BS端主从表的快速开发》了解了Vue3+ElementPlus的BS端主从表的实现,了解了大概的设计和界面设计方式,我们现在切换一下,看看如何结合FastAPI+WxPython实现主从表界面的展示和编辑处理的。

FastAPI的后端采用控制器基类继承方式提供标准化接口,SqlALchemy提供的数据ORM管理,相关代码通过代码生成工具快速生成,包括后端的API接口定义类,SqlALchemy模型类、DTO对象类,以及前端的界面生成等工作。本篇随笔主要介绍WxPython跨平台开发框架之主从表展示和录入的界面处理--产品报价单和明细记录的处理。

1、FastAPI实现主从表数据接口和SqlAlchemy的数据处理

WxPython跨平台开发框架全部采用Python语言进行开发,包括后端的内容,采用 基于SqlAlchemy+Pydantic+FastApi 的后端框架,FastAPI启动后,进入Swagger页面如下所示,列出每个业务表的相关接口。

以上就是常规化的接口,包括单个获取、ID存在、条件查询、分页查询、数量查询、增加、删除、更新等标准化接口,这些基础类接口一般封装在API的控制器基类中。

该后端接口采用统一的接口协议,标准协议如下所示。

{"success": false,"result":  T ,"targetUrl": "string","UnAuthorizedRequest": false,"errorInfo": {"code": 0,"message": "string","details": "string"}
}

常规化的接口是结合泛型的方式,这样定义可以很好的抽象不同的业务类接口到基类控制器中,如下是FastApi 后端的基类控制器定义。

image

 有了上面基类定义好的常规化接口,子类只需要继承基类控制器即可获得强大的功能接口了。

一般API控制器的子类,只需要继承基类就可以了,额外增加的接口按常规化的设计函数即可,可以参考基类的做法来写各种(GET、PUT、DELETE、POST)的处理函数。

image

我们来看看对于产品报价单和明细记录的处理,这两个代表不同的业务表,我们可以分开管理,通过约束他们的记录关系实现主从表弹性化的管理。

如对于主表,我们在基类接口外定义多两个函数,主要就是删除主表的时候,同时移除明细记录的关联操作。

from fastapi import APIRouter, Depends, HTTPException, Query, Request, Path, Body..................
# 创建路由,用于处理自定义接口 router = APIRouter()@router.get("byorderno/{orderno}",response_model=AjaxResponse[QuotationDto | None],summary="根据报价单编号获取对象信息",dependencies=[DependsJwtAuth], ) async def find_by_orderno(orderno: Annotated[str | None, Path(description="订单编号")],request: Request,db: AsyncSession = Depends(get_db), ):# ip = await get_request_ip(request)item = await quotation_crud.get_by_column(db, "handno", orderno)item = QuotationDto.model_validate(item) if item else Nonereturn AjaxResponse(item)@router.delete("quotation-related/{id}",response_model=AjaxResponse[bool | None],summary="删除报价单及明细信息",dependencies=[DependsJwtAuth], ) async def delete_quotation_related(id: Annotated[str | None, Path(description="报价单ID")],request: Request,db: AsyncSession = Depends(get_db), ):# ip = await get_request_ip(request)#获取记录信息item = await quotation_crud.get(db, id)if not item:return AjaxResponse(False)# 删除相关的明细记录res = await quotationdetail_crud.delete_by_column(db, "orderno", item.handno)if res: # 再删除报价单 await quotation_crud.delete_byid(db, id)return AjaxResponse(res)# 使用基类控制器,可以继承常规CRUD的接口,并自动生成路由,依赖注入,数据库连接等功能 ——构建方式2 controller = BaseController[Quotation, str, QuotationPageDto, QuotationDto](quotation_crud,pagedto_class=QuotationPageDto,dto_class=QuotationDto,router=router, ) controller.init_router() # 初始化常规CRUD等接口的路由

而报价单明细业务控制器,主要需要根据报价单号(订单号)获取明细的接口

from fastapi import APIRouter, Depends, HTTPException, Query, Request, Path, Bodyfrom typing import Type, TypeVar, Generic, List, Dict, Any, Optional, Annotated
from datetime import datetime
from sqlalchemy.ext.asyncio import AsyncSessionfrom schemas.base import AjaxResponse, ErrorInfo, ListResult, PagedResult
from api.base_controller import BaseController
from db.session_async import get_db
from common.jwt import DependsJwtAuthfrom models.quotationdetail import QuotationDetail
from schemas.quotationdetail import QuotationDetailDto, QuotationDetailPageDto
from crud.quotationdetail import quotationdetail as quotationdetail_crud
from crud.operationlog import operationlog as operationlog_crud
from utils.request_parse import get_request_ip# 创建路由,用于处理自定义接口
router = APIRouter()@router.get("/by-orderno",response_model=AjaxResponse[List[QuotationDetailDto] | None],summary="根据订单编号获取记录",dependencies=[DependsJwtAuth],
)
async def get_by_orderno(orderno: Annotated[str | None, Query(description="订单编号")],request: Request,db: AsyncSession = Depends(get_db),
):# ip = await get_request_ip(request)items = await quotationdetail_crud.get_by_orderno(db, orderno)# print(len(items))items = [QuotationDetailDto.model_validate(item) for item in items]return AjaxResponse(items)@router.delete("/by-orderno/{orderno}",response_model=AjaxResponse[bool | None],summary="根据订单编号删除所有明细记录",dependencies=[DependsJwtAuth],
)
async def delete_by_orderno(orderno: Annotated[str | None, Path(description="订单编号")],request: Request,db: AsyncSession = Depends(get_db),
):res = await quotationdetail_crud.delete_by_attributes(db, QuotationDetail.orderno == orderno)return AjaxResponse(res)# 使用基类控制器,可以继承常规CRUD的接口,并自动生成路由,依赖注入,数据库连接等功能 
controller = BaseController[QuotationDetail, str, QuotationDetailPageDto, QuotationDetailDto](quotationdetail_crud,pagedto_class=QuotationDetailPageDto,dto_class=QuotationDetailDto,router=router,
)
controller.init_router()  # 初始化常规CRUD等接口的路由

 

由于基类控制器接口的标准化,我们根据框架后端的接口进行前端API调用类的封装处理,从而实现业务基类调用接口的统一封装,简化代码。这样增删改查等处理的接口都可以抽象到BaseApi里面了。

如对于权限模块,我们涉及到的用户管理、机构管理、角色管理、菜单管理、功能管理、操作日志、登录日志等业务类,那么这些类继承BaseApi,就会具有相关的接口了,如下所示继承关系。

 

2、基于SqlAlchemy实现的业务模型

FastAPI负责提供数据的API接口,底层的数据处理,通过SqlAlchemy + MongoDB 实现多种数据库的数据管理,如对于MySQL、Postgresql、SQLite、Oracle、MongoDB等进行接入和数据交换处理。

对于常规的业务表,我们采用SqlAlchemy实现数据库的ORM管理的,SqlAlchemy也是Python领域中非常强大的ORM管理模块之一, 它让你用 Python 对象来操作数据库,而不是手写 SQL 语句。

一般我们先定义好模型的基类,提供简单的封装

image

 然后在业务类里面继承它即可

image

 报价单的明细表也是类似的

image

这些模型类和对应接口的DTO类只需要在代码生成工具中进行一键生成就可以了,不用编写。

 在代码生成工具 Database2Sharp  打开数据库列表后,右键菜单可以选择生成对应的Python+FastApi后端项目,如下界面所示。

选中相关的表后,一键可以生成各层的类文件,其中包括最为繁琐的Model映射类信息。如下是生成的相关类的界面效果。

 

2、WxPthon实现基于Python桌面端主从表的数据处理

我们知道,一般对于单表来说,业务和界面会相对比较简单,如下面的界面效果,在Windows下客户信息的列表管理和数据编辑界面如下所示。

 

而对于主从表,一般除了主业务表外,会关联一个到多个的明细表,对于报价单来说,就只有一个明细表,如下所示是具体的界面列表展示。

image

对于列表的主从表关联关系,没有太多好说的,就是增加了一个明细表的处理展示

对于主从表编辑界面来说,就需要复杂处理一些,在表格需要直接编辑录入并保存明细的操作处理,如下是主从表的编辑界面的实现效果。

image

其主要就是在第一次创建的时候,对表格数据类进行设置

image

表格的数据直接录入,一般不是仅仅的通过文本框的录入,一般录入有选择表的记录,下拉类表、复选框、图像、数值、颜色等等特殊的录入的。

 如自定义数据列表选择界面,我通过定义一个产品的数据列表展示供选择,单击产品编码处,弹出一个选择框进行选择。

image

为了实现对表格数据单元格的单击监控,我们绑定了对应的事件。

AsyncBind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.on_cell_left_click, self.sub_grid)

然后对事件进行实现即可。

image

 下拉列表则是通过绑定固定列表,或者字典类型的方式实现字典下拉列表选择

image

初始化字典列表很容易,如下代码所示。

image

 其他案例可以参考测试效果,支持多种数据输入处理,测试界面效果如下所示。

image

 

以上就是对于WxPython应用,结合前后端的处理,实现了主从表展示和录入的界面处理--产品报价单和明细记录的处理。

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

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

相关文章

2025 年南昌装修公司推荐:南昌宿然设计 —— 无营销套路专注落地还原的技术型装修设计机构

行业背景随着 2025 年南昌房地产市场的持续发展,业主对装修的需求不再局限于基础功能实现,更追求个性化、高品质且能真正落地的设计效果。当前南昌装修市场中,部分公司存在过度营销、套路多的情况,导致业主难以辨别…

杂题记录2

一些 AT *2000 上下的小清新题 [ARC186B] Typical Permutation Descriptor 题目保证有解,我们建出笛卡尔树过后是经典问题,可以组合数求解。 注意到大小关系给出的是一段区间比一个数大的形式,我们考虑开 vector 把…

每日坚持读一段英文,熟悉英文表达-2025-10-16

每日坚持读一段英文,熟悉英文表达-2025-10-16Introducing GPT-5 in Microsoft 365 Copilot Chat We have great news—GPT-5, OpenAI’s newest AI system, is now available in Microsoft 365 Copilot Chat to help …

【运维自动化-标准运维】各类全局变量使用说明(下)

一、集群模块IP选择器 此变量用于获取集群和模块下的IP 创建 输入名称和KEY值 引用 ${KEY}引用${KEY},返回类型为字符串,值为用英文逗号,连接的用户选择的集群和模块下的IP使用自定义输入IPIP: IP必须填写【云区域ID…

英语_阅读_Travel widely_待读

In high school and college, you may be encouraged to travel or study abroad. 在高中和大学,你可能会被鼓励去旅行或出国留学。 Perhaps you are too busy with your schoolwork to seriously consider these cha…

英语_阅读_Travel widely_待读

In high school and college, you may be encouraged to travel or study abroad. 在高中和大学,你可能会被鼓励去旅行或出国留学。 Perhaps you are too busy with your schoolwork to seriously consider these cha…

2025年恒温恒湿系统厂家最新权威推荐榜:精加工车间/厂房/美术馆/仓库/计算机房/档案室/工厂车间恒温恒湿环境解决方案专业解析

2025年恒温恒湿系统厂家最新权威推荐榜:精加工车间/厂房/美术馆/仓库/计算机房/档案室/工厂车间恒温恒湿环境解决方案专业解析在现代工业生产与文化遗产保护领域,恒温恒湿环境控制技术已成为保障产品质量、设备稳定与…

2025年鸡精生产线厂家最新推荐排行榜,高速混合机,WDG农药生产线,鸡粉/海鲜精干燥设备,调味料干燥设备,全自动配料,鸡精干燥成套设备,螺带混合机公司推荐

2025年鸡精生产线厂家最新推荐排行榜:专业设备采购权威指南在食品加工和农药生产行业,鸡精生产线、高速混合机、WDG农药生产线、鸡粉干燥设备等关键设备的性能直接影响产品质量和生产效率。随着2025年的到来,行业对…

10 16

1.3将所有 \(y_i\) 按照 \(x_i\) 排序,定义 \(f_{i,j}\) 表示其中一只手在 \(y_i\) 且另一只手在 \(j\) 的最小花费,转移有两种:将 \(y_{i-1}\) 处的手移动到 \(y_i\) 处:\(f_{i,j} = \min(f_{i-1,j} + dis_{y_{i-1…

Gitee Pipe:重塑关键领域DevSecOps生态的智能引擎

Gitee Pipe:重塑关键领域DevSecOps生态的智能引擎 在数字化转型浪潮中,关键领域软件交付正面临前所未有的安全与效率挑战。Gitee Pipe作为国产DevSecOps领域的标杆产品,通过标准化CI/CD流水线与智能化技术架构,正在…

2025 苏州注册公司服务机构实用推荐:5 家靠谱机构帮初创者少走弯路

2025 年上半年苏州新增市场主体达 8.2 万家,其中初创企业占比 67%,公司注册代办服务成为创业者开启征程的重要助力。面对繁杂的注册流程与地域政策差异,选择专业机构能显著降低初创成本。以下结合服务效率、政策适配…

ESP32-C5来袭,双频Wi-Fi 6 + BLE 5.0 + Zigbee三线合一

ESP32-C5是行业首款支持2.4&5GHz双频 Wi-Fi 6、Bluetooth 5 (LE)和IEEE 802.15.4(Zigbee,Thread)连接性能的 RISC-V MCU,专为需要高效无线传输的物联网应用设计。芯片搭载RISC-V 32位单核处理器,主频高达240 MHz…

2025年铝单板厂家最新推荐排行榜,幕墙铝单板,双曲铝单板,冲孔铝单板,雕花铝单板,异形铝单板公司精选

2025年铝单板厂家最新推荐排行榜:幕墙铝单板、双曲铝单板、冲孔铝单板、雕花铝单板、异形铝单板公司精选随着建筑行业的持续发展和建筑装饰材料的不断创新,铝单板作为一种优质的幕墙装饰材料,在建筑外立面和室内装饰…

【照片GPS批量导出工具】,一键导入,秒出Excel!

【照片GPS批量导出工具】,一键导入,秒出Excel!【米牛照片GPS批量导出工具】核心提炼: 一键批量: 告别手动记录的繁琐,效率提升神器。 专业全面: 提取超过15项核心EXIF数据,不仅是GPS。 精准可靠: 直接读取照片…

VkDescriptorSetLayout的用途是什么?是如何工作的

在Vulkan API中,VkDescriptorSetLayout 是描述符集布局的核心对象,用于定义描述符集(Descriptor Set)中资源的组织结构和访问规则。其用途和工作原理可拆解如下: 核心用途定义描述符集的结构描述符集是存储着色器…

2025 年国内本安电源源头厂家最新推荐排行榜:聚焦 12V/24V/5V 防爆电源,助力企业精准选优质供应商

在油气、化工、水务、智能制造等关键行业中,本安电源是保障设备安全稳定运行的核心部件,其品质与适配性直接决定着整个生产系统的可靠性。当前市场上本安电源产品质量参差不齐,部分厂家存在防爆参数匹配不灵活、无法…

2025年粉末冶金制品/零件厂家最新权威推荐榜:电机轴承、单向轴承、含油轴承、自润滑轴承源头供应商精选

2025年粉末冶金制品/零件厂家最新权威推荐榜:电机轴承、单向轴承、含油轴承、自润滑轴承源头供应商精选行业技术发展现状与趋势粉末冶金技术作为现代制造业的核心工艺之一,在精密零件制造领域持续发挥着不可替代的作…

MSSQL 恢复到时间点方法

1.数据库属性要用完全模式或者大容量日志模式 2.要有一个原始备份。加日志备份。/* 使用STANDBY模式的完整还原流程 1. 首先还原完整备份(保持不变) sql RESTORE DATABASE [bhgl4] FROM DISK = NK:\temp\y-09.bak …

【C4D精品资源】iPhone17系列全家桶3D模型源文件:含动画场景+OC材质全预设

作为深耕 C4D 电商可视化领域多年的创作者,本次分享的 iPhone17 系列 3D 模型从工业设计还原度、材质精度到渲染效率均经过多轮优化,完美适配技术学习者与商业设计师需求:​ 👉👉↓载:C4D苹果17全家桶手表3D模…

2025 土工布厂家推荐榜:山东鸿跃环保—— 从水利到基建,防水土工布/长丝土工布/短丝土工布/防渗土工布适配全需求

随着基础设施建设提速、环保政策趋严及生态修复需求激增,土工布作为关键工程材料,已从传统水利领域延伸至交通、环保、矿业等多元场景,2025 年全球市场规模预计突破 250 亿美元,中国贡献率超 35%。但市场扩张也导致…