在前面的《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框架的开发的更多相关文章

  1. Python的 GUI 框架

    Python的 GUI 框架 Tkinter Python内嵌的gui环境,使用TCL实现,python IDLE由Tkinter实现 历史悠久,perl中有对应的perlTk.Python标准安装包 ...

  2. python的GUI框架tkinter,实现程序员的流氓式表白逻辑

    导入依赖 '''导入依赖''' import tkinter as tk import tkinter.messagebox as msg 创建并隐藏根窗口 '''创建并隐藏根窗口''' root_w ...

  3. 跨平台移动框架iMAG开发入门

    iMAG是一个非常简洁高效的移动跨平台开发框架,开发一次能够同一时候兼容Android和iOS平台,有点儿Web开发基础就能非常快上手.当前移动端跨平台开发的框架有非常多,但用iMAG另一个优点,就是 ...

  4. Qt 6.0精简WebEngine SerialPort Multimedia等成为半残GUI框架一览

    由于 Qt 集成了大量成熟模块,使之成为 C++ 领域中最好用的开源技术跨平台 GUI 开发框架.基于 Qt 能开发 Windows MacOS 传统桌面或无 GUI 应用程序.Unix/Linux ...

  5. 超全!Python图形界面框架PyQt5使用指南!

    使用Python开发图形界面的软件其实并不多,相对于GUI界面,可能Web方式的应用更受人欢迎.但对于像我一样对其他编程语言比如C#或WPF并不熟悉的人来说,未必不是一个好的工具. 常见GUI框架 P ...

  6. Python笔记_第四篇_高阶编程_GUI编程之Tkinter_1.使用Python进行GUI编程的概述

    1. GUI概述: GUI全称为Graphical User Interface,叫做图形用户界面,也是一种交互方式(Interaction).早期计算机使用的命令行界面(command-line i ...

  7. Atitit 桌面软件跨平台gui解决方案 javafx webview

    Atitit 桌面软件跨平台gui解决方案 javafx webview 1.1. 双向js交互1 1.2. 新弹出窗口解决1 1.3. 3.文档对象入口dom解析1 1.4. 所以果断JavaFX, ...

  8. 目前比较流行的Python量化开源框架汇总(交易+风险分析工具)

     注:点击框架名称通往Github talib talib的简称是Technical Analysis Library,主要功能是计算行情数据的技术分析指标 numpy 介绍:一个用python实现的 ...

  9. 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlCore

    大家好 , 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 , 名字叫 HtmlCore  . 项目的一个主要目标是可以用 .Net 在 移动设备 上 开发 GUI 程序 (界面程 ...

  10. python 关于GUI的思考(转)

    作者:知乎用户链接:https://www.zhihu.com/question/19721063/answer/21311275来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

随机推荐

  1. 武装你的WEBAPI-OData使用Endpoint

    本文属于 OData 系列文章 Introduction 更新: 由于新版的 OData 已经默认使用了 endpoint 模式(Microsoft.AspNetCore.OData 8.0.0),不 ...

  2. 天地图接口Python代码详解

    天地图是中国国家测绘地理信息局推出的一款权威.全面的在线地理信息系统,提供了丰富的卫星影像.地形.矢量图等地图资源.开发者可以通过天地图提供的API接口,实现地图的展示.搜索.定位等功能.本文将详细介 ...

  3. 执行docker ps时提示"dial unix /var/run/docker.sock: connect: permission denied"

    0. 创建docker用户组 sudo groupadd docker 1. 将当前用户加入docker组 # sudo gpasswd -a $USER docker $ sudo usermod ...

  4. 龙哥量化:macd背离量化的细节问题(图解)

    如果您需要代写技术指标公式, 请联系我. 龙哥QQ:591438821 龙哥微信:Long622889 读完本篇,通过解决背离标准量化不清的问题,可以规范背离的使用时机,同时准确过滤假信号,找到真正的 ...

  5. Qt/C++音视频开发49-多级连保存和推流设计(同时保存到多个文件/推流到多个平台)

    一.前言 近期遇到个用户需要多级联的保存和推流,在ffmpegsave多线程保存类中实现这个功能,越简单越好,就是在推流的同时,能够开启自动转储功能,一边推流的同时一边录像保存到本地视频文件.最初设想 ...

  6. Qt音视频开发39-海康sdk回调拿到数据GPU绘制的实现

    一.前言 采用海康的sdk做开发,最简单最容易的方式就是传入句柄(windows和linux都支持/很多人以为只有windows才支持)即可,这种方式不用自己处理绘制,全部交给了sdk去处理,所以cp ...

  7. Qt编写4K/8K大分辨率播放器(8K占用1%CPU)

    一.前言 在经过多种内核的洗礼以后,逐渐对不同内核的不同音视频文件和视频流进行大量的对比测试,比如测试对各种格式的支持性,对各种网络流的支持程度,在同一个地址下占用的CPU/GPU资源比对,最终发现播 ...

  8. Qt编写地图综合应用11-动态添加

    一.前言 在添加设备点或者区域形状的时候,会考虑是直接静态的方式写入到网页中加载,还是动态js函数异步加载的方式,这个需要根据现场的实际需求来,如果只需要一次加载的话建议静态即可,如果运行期间还需要动 ...

  9. JedisPool和Jedis推荐的生命周期

    在开发 Web 项目时,使用 Jedis 客户端与 Redis 进行交互时,通常建议将 JedisPool 设置为单例或静态的,而 Jedis 实例则不应该是单例的.以下是详细的解释和最佳实践: 1. ...

  10. 基于sass tailwindcss的传统页面开发脚手架

    这是一个基于sass和tailwindcss的快速开发传统多页面的npm脚手架. package.json { "name": "sass-tailwindcss-sta ...