使用PySide6/PyQt6实现Python跨平台GUI框架的开发
在前面的《Python开发》中主要介绍了FastAPI的后端Python开发,以及基于WxPython的跨平台GUI的开发过程,由于PySide6/PyQt6 在GUI的用途上也有很大的优势,因此把原先完成的WxPython 开发框架改造成使用PySide6/PyQt6实现Python跨平台GUI框架的开发过程,本篇随笔介绍它们之间项目联系和不同,主要针对PySide6/PyQt6 的特性进行不同的分解介绍。
1、技术架构体系--一个中心,多个前端
基于PySide6/PyQt6实现的 Python跨平台桌面端GUI框架,和WxPython的跨平台桌面端一样,都是是整个架构体现的一部分,一个Web API中心,同时提供多个接入的终端,如下架构图所示。
PySide6 和 PyQt6 开发上基本上已经趋向大同,很多时候只需要替换一下前面的命名空间即可,因此PySide6 和 PyQt6 开发上已没有多少差异,QT的官方已经把PySide作为Python的GUI 标准案例进行文档介绍了。

其中的Python + FastAPI项目是一个Web API的项目,为各个前端提供接口的后端项目,其界面自动整合Swagger的文档界面,如下所示。

单个模块包含很多通用的接口,通用的接口能满足90%以上的功能需求,以及一些额外的自定义接口。如下是客户信息模块的接口列表。

该后端接口采用统一的接口协议,具有统一的协议规范和定义。标准协议如下所示。
{
"success": false,
"result": T ,
"targetUrl": "string",
"UnAuthorizedRequest": false,
"errorInfo": {
"code": 0,
"message": "string",
"details": "string"
}
}
结合泛型的方式,这样定义可以很好的抽象不同的业务类接口到基类BaseApi中,这样增删改查等处理的接口都可以抽象到BaseApi里面了。
权限模块我们涉及到的用户管理、机构管理、角色管理、菜单管理、功能管理、操作日志、登录日志等业务类,那么这些类继承BaseApi,就会具有相关的接口了,如下所示继承关系。

因此在前端、后端都可以广泛的使用基类抽象的方式,实现绝大多数接口的封装处理。

2、PySide6/PyQt6实现Python跨平台的桌面前端的基类设计
对于桌面前端,由于大多数情况下,界面的表现逻辑可以使用不同的规则进行抽象,如自定义控件、列表界面、弹出对话框界面等,我们把它抽象出来进行不同的处理。子类界面进行一定程度的扩张即可获得更好的使用、更简化的代码。

对于自定义控件,我们对其封装,使之能够在开发使用习惯上更一致,下面是我们根据需要对常见的原生控件进行一些自定义控件的封装列表。

自定义控件在提供一致的接口上,也可以更有效的提供一些特殊接口,如简化字典数据的绑定处理等。

对于列表和对话框界面的封装,能够简化对泛型模型数据的统一处理,因此可以简化继承子类的代码,提供代码维护开发和维护的效率。

3、PySide6/PyQt6实现Python跨平台的桌面前端的界面展示
完成了基础部分的自定义控件、对话框窗口、列表窗体、API调用封装等方面的处理后,就可以基于这些基础上进行界面的开发了。
登录界面效果如下。

和WxPython的跨平台界面效果一样,该框架也是一个多文档管理界面,其中用户管理界面如下所示。

列表包含有有树形列表、条件查询框、通用条件(查询、新增、编辑、删除、导出)等、列表展示、分页导航等内容。这些都是在基类中进行了统一的抽象处理,子类根据需要调整属性或重写相关函数即可实现个性化的界面定义。
树列表或者表格控件,右键可以弹出相关的右键菜单

在列表界面中,选择新增、编辑,会弹出模态对话框进行数据展示或者编辑处理。

参数配置界面效果如下所示

通用字典信息的管理如下所示。

批量新增字典项目界面如下。

系统中统一展示和选择图标的界面如下所示。

其他界面就不再一一介绍,有空再继续细化各个模块的开发总结。
4、WxPython桌面前端的界面展示
对照上面的PySide6/PyQt6实现Python跨平台GUI框架界面,我们把WxPython相关的界面对比一下,先有一个直观的感受。

树列表或者表格数据控件支持右键弹出菜单处理。

在列表界面中,选择新增、编辑,会弹出模态对话框进行数据展示或者编辑处理。

参数配置界面效果如下所示

通用字典信息的管理如下所示。

系统中统一展示和选择图标的界面如下所示。

使用PySide6/PyQt6实现Python跨平台GUI框架的开发的更多相关文章
- Python的 GUI 框架
Python的 GUI 框架 Tkinter Python内嵌的gui环境,使用TCL实现,python IDLE由Tkinter实现 历史悠久,perl中有对应的perlTk.Python标准安装包 ...
- python的GUI框架tkinter,实现程序员的流氓式表白逻辑
导入依赖 '''导入依赖''' import tkinter as tk import tkinter.messagebox as msg 创建并隐藏根窗口 '''创建并隐藏根窗口''' root_w ...
- 跨平台移动框架iMAG开发入门
iMAG是一个非常简洁高效的移动跨平台开发框架,开发一次能够同一时候兼容Android和iOS平台,有点儿Web开发基础就能非常快上手.当前移动端跨平台开发的框架有非常多,但用iMAG另一个优点,就是 ...
- Qt 6.0精简WebEngine SerialPort Multimedia等成为半残GUI框架一览
由于 Qt 集成了大量成熟模块,使之成为 C++ 领域中最好用的开源技术跨平台 GUI 开发框架.基于 Qt 能开发 Windows MacOS 传统桌面或无 GUI 应用程序.Unix/Linux ...
- 超全!Python图形界面框架PyQt5使用指南!
使用Python开发图形界面的软件其实并不多,相对于GUI界面,可能Web方式的应用更受人欢迎.但对于像我一样对其他编程语言比如C#或WPF并不熟悉的人来说,未必不是一个好的工具. 常见GUI框架 P ...
- Python笔记_第四篇_高阶编程_GUI编程之Tkinter_1.使用Python进行GUI编程的概述
1. GUI概述: GUI全称为Graphical User Interface,叫做图形用户界面,也是一种交互方式(Interaction).早期计算机使用的命令行界面(command-line i ...
- Atitit 桌面软件跨平台gui解决方案 javafx webview
Atitit 桌面软件跨平台gui解决方案 javafx webview 1.1. 双向js交互1 1.2. 新弹出窗口解决1 1.3. 3.文档对象入口dom解析1 1.4. 所以果断JavaFX, ...
- 目前比较流行的Python量化开源框架汇总(交易+风险分析工具)
注:点击框架名称通往Github talib talib的简称是Technical Analysis Library,主要功能是计算行情数据的技术分析指标 numpy 介绍:一个用python实现的 ...
- 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlCore
大家好 , 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 , 名字叫 HtmlCore . 项目的一个主要目标是可以用 .Net 在 移动设备 上 开发 GUI 程序 (界面程 ...
- python 关于GUI的思考(转)
作者:知乎用户链接:https://www.zhihu.com/question/19721063/answer/21311275来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
随机推荐
- 一款渗透测试信息收集集成工具--mitan密探
本工具仅供安全测试人员运用于授权测试, 禁止用于未授权测试, 违者责任自负.作者及本公众号相关负责人不对您使用该工具所产生的任何后果负任何法律责任,在扫描模块使用多线程,在测试过程中根据目标的实际情况 ...
- IOS跳转到系统相册及一些其他的URL Scheme
IOS跳转到系统相册及一些其他的URL Scheme APP 间的跳转主要通过 UIApplication.shared.openURL(url) 这种方法来实现的,但iOS10 后又稍加不同,iOS ...
- 【转载】 Spring Security做JWT认证和授权
https://www.jianshu.com/p/d5ce890c67f7 上一篇博客讲了如何使用Shiro和JWT做认证和授权(传送门:https://www.jianshu.com/p/0b11 ...
- 基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v6.0版已发布
关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...
- 关于vue加element-ui上传文件获取文件的sha256的值 第二篇 更改压缩包编码错误
这个依然需要插件crypto-js 首先下载引入 import CryptoJs from "crypto-js"; 话不多说直接上代码,首先是element的上传 <el- ...
- CDS标准视图:维护任务清单数据 I_MaintenanceTaskListData
视图名称:维护任务清单数据 I_MaintenanceTaskListData 视图类型:基础 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'IPMTASKLISTD ...
- pymysql数据库操作
1.安装pymsql pip install pymysql 2.导入包 import pymysql 3.连接数据库 conn=pymysql.connect(host='主机地址',user= ...
- SM9-加解密
算法过程 程序实现 ///************************************************************************ // File name: ...
- 对象流的序列化与反序列化:ObjectInputStream 和 ObjectOutputStream
1.对象流: ObjectInputStream 和 ObjectOutputStream2.作用:ObjectOutputStream:内存中的对象--->存储中的文件.通过网络传输出去:序列 ...
- [BZOJ P2771] 天才ACM
[BZOJ P2771] 天才ACM 传送门 朴素算法 枚举终点 \(r\),对区间 \([l, r]\) 排序求校验值 \(sum\),比较 \(sum\) 和 \(t\) $ sum \le t ...