在前面的《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. 【Amadeus原创】群晖关闭局域网发现

    套件中心-媒体服务器,卸载.

  2. 【Java】关于Maven仓库地址

    仓库 如果你没有配置阿里云仓库镜像源,可以到这里来找 https://mvnrepository.com/ 如果你配置了阿里云仓库镜像源,可以来这里找 https://developer.aliyun ...

  3. Qt音视频开发14-mpv读取和控制

    一.前言 用mpv来读取文件的信息,以及设置当前播放进度,音量.静音等,和当时vlc封装的功能一样,只不过vlc是通过调用函数接口去处理,而mpv是通过读取和设置属性来处理,vlc支持定时器或者线程中 ...

  4. TensorRT-YOLO:灵活易用的 YOLO 部署工具

    TensorRT YOLO TensorRT-YOLO 是一款专为 NVIDIA 设备设计的易用灵活.极致高效的YOLO系列推理部署工具.项目不仅集成了 TensorRT 插件以增强后处理效果,还使用 ...

  5. java第二章数组学习

    java第二章数组 数组的概念和特点 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个 名字命名,并通过编号的方式对这些数据进行统一管理. 特点 数组本身是引用数据类型,而数组中 ...

  6. 学Shiro完结版-3

    第八章 拦截器机制--<跟我学Shiro> 8.1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展:所以如果对Filter不熟悉可以参考<Servlet3 ...

  7. iptables使用详解(示例如何屏蔽docker 暴露的端口)

    [场景]搭建了一台CentOS虚拟机,并在上面搭了DOCKER,然后再DOCKER中安装Mysql.但只要将网络端口映射到宿主机上,那么外部网络就可以直接访问该数据.为此,我们需要使用防火墙(暂且不考 ...

  8. 什么是 SNI?

    参考: 链接1   链接2 介绍 是什么:SNI(Server Name Indication)是 TLS 的扩展,这允许在握手过程开始时通过客户端告诉它正在连接的服务器的主机名称. 作用:用来解决一 ...

  9. Kotlin:【针对空安全管理的操作】安全调用操作符、使用带let的安全调用、非空断言操作符(感叹号操作符)、使用if判断null值情况、使用空合并操作符(类似三元表达式)

     具体使用:

  10. Pinely Round 4 (Div. 1 + Div. 2)

    题目链接:Pinely Round 4 (Div. 1 + Div. 2) 总结:被B卡了一年. A. Maximize the Last Element tag:模拟 Description:给定一 ...