tkinter-TinUI-xml实战(10)展示画廊

tkinter-TinUI-xml实战(10)展示画廊

  • 引言
  • 声明
  • 文件结构
  • 核心代码
    • 主界面
    • 统一展示控件
    • 控件展示界面
      • 单一展示
      • 已有展示
      • 多类展示
  • 最终效果
    • 在这里插入图片描述 ![](https://img-blog.csdnimg.cn/direct/286fcaa2fa5648a992a0ac79b4efad82.png) …………
  • 结语

引言

首先,我也不知道Gallery直接翻译成“画廊”合不合适,这里参考现在有些UI库做展示界面的词,比如“WinUI3 Gallery”。

TinUI是有自己的展示界面的,即直接运行TinUI.py时展示。这个界面比较混乱,实际上是我自己在捣鼓新控件或新样式时用的快速打开界面,我把每个控件随便放到一个位置,每次对控件的更改运行一下就知道了。

【原本界面】

但是在此之前也有人提到,这样的展示界面太混乱了。

那么,我就写一个新的吧。

新展示界面拥有如下特性:

  1. 使用xml编写,更简洁。

  2. 控件按英文首字母排序,以供选择。

  3. 不替代原本展示界面,因为我自己要用。

开始。


声明

本项目属于作者原创。借鉴了GitHub/TinUI上的tuxml.py,翻版必究,但可以自行添加功能代码。

本项目使用的TinUI为我开源并维护在GitHub上的主文件——TinUI.py。当然,使用PYPI中下载安装的tinui也可以。


文件结构

这次文件结构并不复杂,只不过每个控件都有自己的xml展示界面,所以显得比较多而已。

这个展示界面的主文件maintest.py在TinUI的\test下。

所有界面xml文件都在\test\testpage目录下。

节选


核心代码

主界面

主界面主要由标题、图标、控件选择器、控件展示区构成。前三者为左侧一行,控件展示区独自占右侧的大部分面积。

主界面main.xml如下:

<tinui>
<line><line><title text='TinUI Gallery'></title></line><line><image width='200' height='200' imgfile='test\LOGO.png'></image></line><line><listbox height='320' bg='#f0f0f0' data='self.datas["controls"]' command='self.funcs["loadcontrol"]'>controls</listbox></line><ui bg='#f0f0f0' width='590' height='570' scrollbar="True" region='auto'>displayui</ui>
</line>
</tinui>

对应的功能代码maintest.py如下:

import sys
sys.path.append('..')
from TinUI import *
from tkinter import Tkdef loadcontrol(controlname):...xmlf=open(r'test\testpage\main.xml','r')
xml=xmlf.read()
xmlf.close()window = Tk()
window.resizable(False,False)
window.iconbitmap('LOGO.ico')
window.title("TinUI main test")
window.geometry("850x600+5+5")
ui=BasicTinUI(window)
uix=TinUIXml(ui)uix.funcs['loadcontrol']=loadcontrol
uix.datas['controls']=['back', 'button', 'button2', 'canvas', 'checkbutton', 'combobox', 'entry', 'expander', 'image', 'info', 'label', 'labelframe','link', 'listbox', 'listview', 'menubar', 'menubutton', 'notebook', 'notecard', 'onoff', 'paragraph', 'passwordbox', 'picker', 'pipspager', 'pivot', 'progressbar', 'radiobox', 'radiobutton', 'ratingbar', 'scalebar', 'scrollbar', 'separate', 'spinbox', 'swipecontrol', 'table', 'textbox', 'title', 'togglebutton', 'tooltip', 'treeview', 'ui', 'waitbar', 'waitframe']
uix.loadxml(xml)
displayui,_,duixml,_=uix.tags['displayui']ui.pack(fill='both',expand=True)
window.mainloop()

在这里插入图片描述

统一展示控件

从上面的代码可以看出,包含所有控件名称的listbox绑定了loadcontrol函数。为了简化展示操作,我们统一用controlname变量指代对应的xml界面文件,对于部分特例控件则使用判断语句进行创建后的操作。

def loadcontrol(controlname):global load_menubar#导入控件说明cfile=open("test/testpage/"+controlname+".xml",mode='r',encoding='utf-8')cxml=cfile.read()cfile.close()duixml.clean()duixml.loadxml(cxml)if controlname=='canvas':canvas=duixml.tags['canvas'][0]canvas.create_text((5,5),text='画布对象:文字。\n需要获取add_canvas的第一个返回值',font='微软雅黑 12',anchor='nw')elif controlname=='expander':expander=duixml.tags['expander'][2]expander.loadxml('''<tinui><line><button2 text='拓展UI框架的按钮'></button2></line><line><paragraph text='拓展UI框架可以节省布局位置,能够使用TinUIXml为可拓展UI框架编写界面布局。' width='190'></paragraph></line><line><paragraph text='感觉如何?' width='190'></paragraph></line><line><ratingbar></ratingbar></line></tinui>''')elif controlname=='menubar':label=duixml.tags['label'][-1]displayui.add_menubar(label)elif controlname=='notebook':notebook=duixml.tags['notebook'][-2]for i in range(1,5):if i==5:#第五个不可删除:notebook.addpage('test'+str(i),'t'+str(i),cancancel=False)else:notebook.addpage('test'+str(i),'t'+str(i))elif controlname=='waitframe':waitframe=duixml.tags['waitframe'][-2]waitframe.start()

这里主要是menubar无法直接展示,notebook, expander, canvas等需要创建后进一步操作来展示。这些操作代码实际上都是直接取自TinUI本身的展示窗口。

控件展示界面

以下给出三种类型的xml界面,是有统一模板的。

单一展示

back.xml为例:

<tinui>
<line><line><title text='back'></title></line><line><paragraph text='TinUI的背景控件,用来呈现不同控件组的层次。' width='580'></paragraph></line><line><paragraph text=' ' width='580'></paragraph></line><line><paragraph text='下方就是back'>p1</paragraph><button2 text='本按钮与左边文字构成控件组'>b1</button2><back uids='("b1","p1")' bg='yellow' fg='yellow'></back></line>
</line>
</tinui>

[back]

已有展示

比如paragraph, scrollbar等,已经在本界面中出现了的。

scrollbar.xml为例:

<tinui>
<line><line><title text='scrollbar'></title></line><line><paragraph text='TinUI的滚动条控件。见展示区域的右侧和下方。' width='580'></paragraph></line><line><paragraph text=' ' width='580'></paragraph></line><line></line>
</line>
</tinui>

[scrollbar]

多类展示

比如等待框在TinUI里有三种类型,直接一起展示,在主界面中也只显示waitbar一个选项。

waitbar.xml为例:

<tinui>
<line><line><title text='waitbar'></title></line><line><paragraph text='TinUI的等待框控件。用waitbar(1,2,3)区分。' width='580'></paragraph></line><line><paragraph text=' ' width='580'></paragraph></line><line><paragraph text='扇形滚动框'></paragraph><waitbar1></waitbar1></line><line><paragraph text=' ' width='580'></paragraph></line><line><paragraph text='点状滚动框'></paragraph><waitbar2></waitbar2></line><line><paragraph text=' ' width='580'></paragraph></line><line><paragraph text='条带滚动框'></paragraph><waitbar3></waitbar3></line>
</line>
</tinui>

[waitbar]


最终效果

在这里插入图片描述

在这里插入图片描述

…………

结语

到此,我们已经完成了一个简介简单的TinUI控件展示程序。该程序会随TinUI5发布,作为TinUI5的重大更新之一。

🔆tkinter创新🔆

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

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

相关文章

【华为云】容灾方案两地三中心实践理论

应用上云之后&#xff0c;如何进行数据可靠性以及业务连续性的保障是非常关键的&#xff0c;通过华为云云上两地三中心方案了解相关方案认证地址&#xff1a;https://connect.huaweicloud.com/courses/learn/course-v1:HuaweiXCBUCNXI057Self-paced/about当前内容为灾备常见理论…

C++:理解拷贝在变量,指针,引用以及构造函数里的意义

变量&#xff0c;指针&#xff0c;引用 //拷贝与拷贝构造函数 //拷贝&#xff08;copy&#xff09;&#xff1a;拷贝数据&#xff0c;拷贝内存 //始终是在拷贝值&#xff0c;但是指针存储的是内存的地址&#xff0c;变量存储的是数据的值 //特别注意&#xff0c;在引用里面的拷…

[AIGC] Spring Gateway:一个简单 yet powerful API 网关

Spring Gateway&#xff08;Spring Cloud Gateway&#xff09;是 Spring 基金会下的一个开源项目&#xff0c;它是一个基于 Spring 5、Project Reactor、Spring Boot 2 和 Spring WebFlux 的简单 yet powerful API 网关。Spring Gateway 可以用来管理 and 控制 API 的生命周期 …

lightGBM集成学习算法

LightGBM集成学习算法是一种基于梯度提升决策树&#xff08;Gradient Boosting Decision Tree&#xff09;的机器学习算法。它是由微软提出的一种高效的梯度提升框架&#xff0c;主要用于解决分类和回归问题。 在集成学习中&#xff0c;LightGBM使用多个决策树来构建一个更强大…

Mysql Day04

mysql体系结构 连接层服务层引擎层&#xff08;索引&#xff09;存储层 存储引擎 存储引擎是基于表建立的&#xff0c;默认是innoDB show create table tb; 查看当前数据库支持的存储引擎 show engines; InnoDB 特点 DML&#xff08;数据增删改&#xff09;遵循ACID模…

【算法与数据结构】42、LeetCode接雨水

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;   程序如下&#xff1a; 复杂度分析&#xff1a; 时间复杂度&#xff1a; O ( ) O() O()。空间复…

Modelsim10.4安装

简介&#xff08;了解&#xff0c;可跳过&#xff09; modelsim是Mentor公司开发的优秀的HDL语言仿真软件。 它能提供友好的仿真环境&#xff0c;采用单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术和单一内核仿真技术&#xff0c;编译仿真速…

AI-TestOps —— 软件测试工程师的一把利剑

写在前面软件测试的前世今生测试工具开始盛行AI-TestOps 云平台● AI-TestOps 功能模块● AI-TestOps 自动化测试流程 写在前面 最近偶然间看到一句话&#xff1a;“软件测试是整个 IT 行业中最差的岗位”。这顿时激起了我对软件测试领域的兴趣&#xff0c;虽然之前未涉及过软…

fast.ai 机器学习笔记(二)

机器学习 1&#xff1a;第 5 课 原文&#xff1a;medium.com/hiromi_suenaga/machine-learning-1-lesson-5-df45f0c99618 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这些笔记将继续更…

在开启 selinux 和配置防火墙的情况下安装和使用 nginx

添加 nginx 仓库配置文件 sudo vi /etc/yum.repos.d/nginx.repo添加内容: nginx] namenginx repo baseurlhttp://nginx.org/packages/OS/OSRELEASE/$basearch/ gpgcheck0 enabled1其中 OS 替换成 rhel 或者 centos, OSRELEASE 替换成 6 或者 7. 例如: nginx] namenginx repo…

java.io.IOException: The temporary upload location [...] is not valid 报错处理

报错 近日&#xff0c;发现上传文件服务报错。 错误原因是[…]中显示的临时地址被删除。 解决方式 方式一 处理方式&#xff1a;重启服务。 服务重启后会自动重新生成临时地址&#xff08;简单&#xff0c;但不推荐&#xff09; 方式二 处理方式&#xff1a;添加配置类。…

xamarin开发安卓程序上架收费吗

xamarin开发安卓程序上架收费吗 Xamarin是一款跨平台应用程序开发工具&#xff0c;可以开发iOS、Android和Windows等多种操作系统的应用程序。对于开发人员来说&#xff0c;它可以快速开发出高质量的应用程序&#xff0c;从而大大节省了开发人员的时间和精力。对于应用的上架方…

C++ dfs的状态表示(五十二)【第十二篇】

今天是对于之前的问题改进 1.k个数求和 对于前面 k 个数的和的求法&#xff0c;我们除了可以用上面的 DFS 方法以后&#xff0c;还有一种搜索策略。 之前的方法是每次去抉择是否选择第 i 个数&#xff0c;现在我们的策略是从剩下的数中选择一个数。比如有 5 个数 1,2,3,4,5…

ASUS华硕灵耀X双屏UX8402V工厂模式原厂Win11.22H2系统安装包,含WinRE恢复出厂时开箱状态自带预装OEM系统

适用型号&#xff1a;UX8402VV、UX8402VU 链接&#xff1a;https://pan.baidu.com/s/1D7tJshKTNFYO4YyzKX0ppQ?pwd3saf 提取码&#xff1a;3saf Zenbook Pro灵耀X笔记本电脑原装出厂Windows11系统 带有ASUS RECOVERY恢复功能、自带面部识别&#xff0c;声卡&#xff0c;网…

【RabbitMQ(二)】:Exchange 详解 | Message Convert 消息转换器

文章目录 03. 使用 Java 代码去操控 RabbitMQ3.1 快速入门3.1.1 创建父子项目3.1.2 编写代码 3.2 Work 模型3.3 RabbitMQ 中的三类交换机3.3.1 Fanout 扇出交换机3.3.2 Direct 交换机3.3.3 Topic 交换机 3.4 声明队列交换机3.4.1 方式一&#xff1a;书写 Config 类3.4.2 方式二…

【QT+QGIS跨平台编译】之三十四:【Pixman+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、Pixman介绍二、文件下载三、文件分析四、pro文件五、编译实践一、Pixman介绍 Pixman是一款开源的软件库,提供了高质量的像素级图形处理功能。它主要用于在图形渲染、合成和转换方面进行优化,可以帮助开发人员在应用程序中实现高效的图形处理。 Pixman的主要特…

maven--插件的管理(pluginManagement)

原文网址&#xff1a;maven--插件的管理&#xff08;pluginManagement&#xff09;_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍maven如何使用pluginManagement来管理插件&#xff08;build标签中的plugins标签&#xff09;。 概述 Maven 使用 dependencyManagement 对…

webgis后端安卓系统部署攻略

目录 前言 一、将后端项目编译ARM64 二、安卓手机安装termux 1.更换为国内源 2.安装ssh远程访问 3.安装文件远程访问 三、安装postgis数据库 1.安装数据库 2.数据库配置 3.数据导入 四、后端项目部署 五、自启动设置 总结 前言 因为之前一直做的H5APP开发&#xf…

《Docker极简教程》--Docker基础--基础知识(四)

一、Docker与操作系统的交互 1.1 Docker与宿主机的关系 Docker 是一种开源的容器化平台&#xff0c;它允许开发人员将应用程序及其所有依赖项打包到一个独立的容器中&#xff0c;从而实现快速部署和跨环境运行。在 Docker 中&#xff0c;有几个重要的概念&#xff1a; Docke…

LLM之RAG实战(二十五)| 使用LlamaIndex和BM25重排序实践

本文&#xff0c;我们将研究高级RAG方法的中的重排序优化方法以及其与普通RAG相比的关键差异。 一、什么是RAG&#xff1f; 检索增强生成&#xff08;RAG&#xff09;是一种复杂的自然语言处理方法&#xff0c;它包括两个不同的步骤&#xff1a;信息检索和生成语言建模。这种方…