在之前随笔《使用PySide6/PyQt6实现Python跨平台通用列表页面的基类设计》中也介绍过对于基于Python对桌面应用开发的处理,针对常规列表界面的基类做了封装,以便适应比较丰富且弹性化界面的要求,并且减少子类的代码处理,本篇随笔进一步探讨使用PySide6/PyQt6或者WxPython实现对列表界面和树列表界面的整合处理这个主题。

1、使用PySide6/PyQt6实现对列表界面和树列表界面的整合处理

基于重用及减少子类代码的目的,我们抽象了列表界面的基类,我们业务列表界面只需要继承基类,并在构造函数提供相应的信息即可比较弹性化的处理界面多元化的问题。

对于常规的列表界面,一般包括查询条件、列表界面(包括分页信息)等元素,如下界面所示。

实际业务的界面可能如下所示。

使用PySide6/PyQt6 的桌面端开发的时候,我们初始化业务类,并传递相关参数给基类列表界面构造处理即可,如下构造函数处理所示。

而有时候,界面上有时候需要搭配树列表进行快速查询或展示的需要,因此也需要在基类中进行一定的抽象处理,以便子类能进一步减少代码。

那么我们通过参数条件进行指定,如果条件符合,那么构建树列表界面即可。

如用户列表界面中,我们需要展示用户部门、用户角色的分类信息,如下所示。

用户管理界面的列表界面如下所示。

那么我们只需要在子类的构造函数处理上,我们只需要设置参数 use_left_panel = True,并且实现 create_tree_panels 函数即可。

我们在基类中和子类的分工中,基类剥离实际业务具体细节,而在高纬度上进行内容的组合即可。

如在基类窗体中,其中的_create_content_panel 是基类构建主查询面板内容的逻辑,其中包括输入条件展示、常见按钮显示、以及列表、分页栏目等。

基类负责组合这些元素在一起即可,具体细节下沉到子类进行处理。

如对于用户列表界面的树列表界面,我们只需要在子类FrmUser中重写函数 create_tree_panels 即可,然后在通过构造函数创建两个自定义树列表控件即可,如下所示。

可以看到界面代码比较简洁,关注点只需要集中在创建树列表即可。

那么运行后就会在基类自动组装中,会展示到主列表界面的左侧了。

虽然我们在创建树列表的时候,会创建对应的右键菜单,如下界面所示。

不过有时候为了直观功能的展示,我们可能希望在树列表的顶部增加一些常规的按钮,如新增、刷新等,那么子类如何进阶来实现了。

那么我们可以对树列表控件进行进一步的封装下,增加一个函数来处理下即可,如下所示。

然后在封装的函数中进一步包装下界面后返回给字典集合即可。

整合后界面就可以看到新增的按钮集合了,这样具体细节还是交给子类,父类没有进行干涉,逻辑和细节分离。

2、使用WxPython实现对列表界面和树列表界面的整合处理

对于上面的使用PySide6/PyQt6实现树列表+常规列表的展示处理,在使用WxPython 的桌面端开发的时候,也是类似的处理方式。

业务列表窗体界面一般也是分为两个部分

对于常规的展示列表界面,列表界面一般分为查询区、列表界面展示区和分页信息区,我们把它分为两个主要的部分,如下界面所示。

在开始的用户界面如下所示。

我们在父类窗体中定义一个开关变量,用来开启或者关闭左侧树列表面板的,如下代码所示。

这样构建树列表就交给函数 create_tree_panels 实现即可,它会构建一到多个的树列表,父界面窗体负责整合它们显示即可。

对于业务的客户信息列表界面,生成的代码如下所示(以客户信息表为例):

对于上面用户业务界面来说,也是类似PySide/PyQt的界面代码,因为我们为基类的接口提供了类似的实现。

同样来说,如果我们需要再树列表的顶部增加一些操作按钮显示,那么使用对应的封装函数来返回一个新的面板即可。如下代码所示。

具体的封装函数,我们在WxPython项目类中实现即可,基本上没有太多的差异。

最后在WxPython项目的显示界面效果如下所示。

可以看到,不管是WxPython的界面,还是PySide/PyQt的运行界面,在列表窗体的基类,相同的抽象函数处理逻辑下,都非常的方便,处理的代码也很类似,因此掌握两个不同Python的组件UI的界面开发,在开发框架的友好加持下,会变得非常方便和简便,开发项目起来,会事半功倍,更不用说会有代码生成工具上的支持了。

选择相关的数据表后,一键生成相关的代码,如下所示。

使用PySide6/PyQt6或者WxPython实现对列表界面和树列表界面的整合处理的更多相关文章

  1. 好神奇的代码,可以让匿名用户对特定SharePoint 列表拥用添加列表项的权限哦

    如果你不使用代码,很难从界面上去设置列表的匿名用户(如果可以请告诉我,我会自动删除这个博文)拥有列表项的添加权限. 其实这种需求是非常必要的,比如: 1.允许新用户去提交一个注册申请, 2.在召集临时 ...

  2. ionic入门之色彩、图标、边距和界面组件:列表

    目录: 色彩.图标和边距 色彩 图标 内边距 界面组件:列表 列表:.list 成员容器:.item .item: 嵌入文本 .item : 嵌入图标 .item : 嵌入头像 .item : 嵌入缩 ...

  3. 精华 ionic入门之色彩、图标、边距和界面组件:列表

    目录:色彩.图标和边距色彩图标内边距界面组件:列表列表:.list成员容器:.item.item: 嵌入文本.item : 嵌入图标.item : 嵌入头像.item : 嵌入缩略图.item : 嵌 ...

  4. Netsharp快速入门(之8) 基础档案(工作区2 设置商品主列表、规格细列表、商品表单、查询)

    作者:秋时 杨昶   时间:2014-02-15  转载须说明出处 3.5.1.1 列表设置 1.选择第一行主列表,点工具-列表方案 2.打开列表方案界面后,在列表项目填入需要用到实体Demo.Arc ...

  5. Delphi 基本数据类型列表 高级数据类型列表 字符类型查询列表清单

    原文:Delphi 基本数据类型列表 高级数据类型列表 字符类型查询列表清单 长长的列表文字类型文件 分类 范围 字节 备注 简单类型 序数 整数 Integer -2147483648 .. 214 ...

  6. 重新想象 Windows 8 Store Apps (23) - 文件系统: 文本的读写, 二进制的读写, 流的读写, 最近访问列表和未来访问列表

    原文:重新想象 Windows 8 Store Apps (23) - 文件系统: 文本的读写, 二进制的读写, 流的读写, 最近访问列表和未来访问列表 [源码下载] 重新想象 Windows 8 S ...

  7. #定义一个方法get_num(num),num参数是列表类型,判断列表里面的元素为数字类型。其他类型则报错,并且返回一个偶数列表:(注:列表里面的元素为偶数)。

    #定义一个方法get_num(num),num参数是列表类型,判断列表里面的元素为数字类型.其他类型则报错,并且返回一个偶数列表:(注:列表里面的元素为偶数). def get_num(num): i ...

  8. Python中如何将二维列表转换成一维列表

    已知:a = [(4,2,3), (5, 9, 1), (7,8,9)]希望将二维列表转换成一维列表:["4,2,3", "5, 9, 1", "7, ...

  9. C# /VB.NET 创建PDF项目符号列表和多级编号列表

    使用项目符号和编号,可以让文档的层次结构更清晰.更有条理,也更容易突出重点.在编辑文档的过程中,我个人也比较偏爱项目标号来标注文章重点信息.在之前的文章中,介绍了如何在Word中来创建项目标号和编号列 ...

  10. C# 创建Word项目标号列表、多级编号列表

    在Word文档中,对于有多条并列的信息内容或者段落时,我们常以添加项目标号的形式来使文档条理化,在阅读时,文档也更具美观性.另外,对于在逻辑上存在一定层级结构的内容时,也可以通过多级编号列表来标明文档 ...

随机推荐

  1. Ubuntu系统安装部署Pandawiki智能知识库

    一.系统环境准备 bash # 更新系统 sudo apt update && sudo apt upgrade -y sudo apt install -y git python3- ...

  2. 01EDA简介

    EDA工具简介 (Electronic Design Automation) 目录 EDA工具简介 目录 1. EDA概述 1.1 什么是EDA? 1.2 EDA工具的分类 1.3 EDA设计流程 2 ...

  3. R语言dplyr包filter函数 Error in filter(., ) : 找不到对象的报错原因和解决办法

    报错描述 当我们想使用dplyr包中的 filter 函数对指定的dataframe进行如下的行筛选时,R报错Error in filter(., ) : 找不到对象X.stage_id.,提示我们没 ...

  4. Rust修仙之道 第十二章:宽度境 · 类型尺寸认知与不定形之术

    第十二章:宽度境 · 类型尺寸认知与不定形之术 "形有大小,道有边界.不能测其尺者,不可轻控其灵." 当顾行云修炼 Trait 技法至高阶,试图为"无定形灵体" ...

  5. 万字长文,学妹吵着要学的RDKS100模型量化及部署,你确定不学?

    作者:SkyXZ CSDN:SkyXZ--CSDN博客 博客园:SkyXZ - 博客园 宿主机环境:Ubuntu22.04(192x CPU 8x NVIDIA GeForce RTX 4090).D ...

  6. leetcode 69 x 的平方根 牛顿迭代法

    简介 简单的题, 直接上代码. 其实还挺复杂的. 参考链接 https://leetcode-cn.com/problems/sqrtx/solution/x-de-ping-fang-gen-by- ...

  7. 面试官:如何实现企业级MCP分布式部署?

    作为一个企业级的 MCP Server 服务,只运行在单机环境上是远远不够的,我们需要让它部署在多个机器上,并且支持分布式的调用,这其中当然还包括负载均衡和节点变更的动态感知等内容. 那么如何让你的 ...

  8. 10分钟学会使用.Net技术开发一个Ai智能体应用-小智esp32

    在当今数字化的时代,语音交互技术正以前所未有的速度发展,为人们的生活和工作带来了极大的便利.XiaoZhiSharp 作为一款使用 C# 语言编写的 "小智SDK",为开发者提供了 ...

  9. 读书笔记: Psychological Power between knowledge and practice; Inverted Totalitarianism;

    John Dewey once remarked that equality becomes dangerous when it is widely praised but empty in prac ...

  10. Linguistics-English-Time is money + A coin has two sides.

    Time is money A coin has two sides.