TinUI发展历程-程序员宅基地

技术标签: tkinter  python  笔记  TinUI  

引言

写这篇文章时,正式版的TinUI框架已经开源一年多(一点点)了,这里暂且写一下TinUI的发展历程,让tkinter爱好者了解一些TinUI的发展路线、主旨,同时更好地运用TinUI这一个工具。

这里就按时间顺序来写了。


TinUI的主旨

好吧,TinUI对我来说就像是课余时间的一个玩具,写写得了。

进入正题。

tkinter原生控件的样式属实有点……,当然,ttk的样式虽然是系统样式,但是细心的就会发现,ttk的哪里是使用系统控件,分明是在原生控件的基础上贴图。就拿按钮来说,在windows11上使用ttk,按钮是圆角,但是仔细看,边框是方形的。而且,点击按钮后,按钮就会出现一个虚线方框。其它windows系统上亦如此。

所以贴图类控件的开发着实麻烦,而且性能会大下降。

那用画布会如何?

当时我在写TinUI的时候还不知道隔壁CustomTkinter(CTK),那是由专业人员带头发起的,使用画布重绘现代样式的tkinter控件。后来发现同行,原来CTK是一个“重型”框架,与TinUI有本质上的区别。主要内容详见TinUI和customtkinter的区别_Smart-Space的博客-程序员宅基地

接着,就是尽可能使用一个画布,绘制出具有现代样式的控件元素,使其成为一个小的轻型框架。虽然有一些输入类控件(Canvas、Text、Entry)无法绘制,但是这仍然无法阻挡TinUI的元素样式渲染,以及超越tkinter原生控件的速度。

顺便提一下,TinUI的原型2019年就有了,那个时候是想写一个富文本排版器,但是觉得用文本框写更方便,所以就没有管它,这也是为什么TinUI有标题和段落控件。后来看不顺眼tkinter原生(毕竟ttk样式还要写style,很麻烦),就重启了这个小项目,命名为TinUI。

class TinUI(Canvas):

    def __init__(self,master,...):
        #...

TinUI早期版本-回归原点

实际上,在2019年末,TinUI的文件主体已经创建。

只不过当时不叫这个名称,而是“TinCanvas”。顾名思义,当时这仍然是一个画布控件,用来作为TinEngine内部的画布,封装更加简单的画布方法。后来发现,没必要,或者说没有什么实现意义。就好比我现在几乎不管TinEngine了。

在2020年的时候,曾经停止了对于TinCanvas的开发。

但是,在2021年初,就产生了上文谈到的建立一个现代化元素控件框架。接着,便将相关代码从TinEngine中脱离出来,建立了TinUI.py。

2021年中考完后,便开始了对TinUI的构建。


TinUI1-解决有无问题

这是最早的TinUI正式版本,于2021年7月首次发布在PYPI。

在这里插入图片描述

很简陋。里面的输入框相当于原封不动地添加标准输入框,按钮还是win10风格,复选框真的是啥也不是,单选框又“新颖独特”。这就是TinUI-1.0.0,pypi上的最早版本。

后来又加入了超链接、等待框等元素控件,这些是完全由画布绘制出来的。

可以看到这样的控件风格有一点点像上世纪的Windows风格。若果说刚开始的TinUI1是从一个废弃的项目转向新的目标,那么,很快,TinUI1的最后几个版本也将进入一个快速的过渡阶段。

不过最开始作为文本排版器的构想,虽然废弃了,但是一些历史遗留问题还是有的,比如元素组件添加方法统一以add_开头,仁者见仁智者见智。

tinui.add_title(...)
tinui.add_button(...)

在这里插入图片描述

在这里插入图片描述

随着表格元素(TinUI比较复杂地绘制的元素组件之一),以及使用新样式的输入框,TinUI已经完成了基础交互控件的创建。2021年10月,TinUI最后一个版本发布,接下来就是一个迅速完善的阶段了。


TinUI2-快速发展

新的阶段,也是一个快速变化的阶段。

在这里插入图片描述

作为TinUI首个额外窗口元素控件,TinUI菜单补全了所有的窗口基本控件(虽然菜单比较简陋,但是后续会改进),也就是说,至此,TinUI提供的元素组件已经够用了,TinUI可以作为窗口唯一控件。其它还没有加入的控件,可以通过画布代码加入,以TreeView为例:

tv=Treeview(tinui)
tinui.create_window(pos,window=tv,width=300,height=300)

treeview在TinUI4中已提供。

接下来,就是2022年年初的TinUI更新,这次更新分离出来了TinUI和BasicTinUI两个类,开发重心也就转到了BasicTinUI,而TinUI则是在其基础上进行封装——可视滚动范围刷新、滚动条支持。而BasicTinUI则可以作为一个单独的TinUI元素渲染框架组件使用。

tu=TinUI(root)
#...
btu=BasicTinUI(root)

这也代表TinUI2的主要目标已经达成——一个稳定的元素控件渲染框架。不过,后面还是继续添加各种各样的控件,并且优化控件样式。比如输入框、复选框、按钮等等。

在这里插入图片描述

这是TinUI2的输入框,仿winui2。此后TinUI3的输入框则是仿winui3样式的圆角输入框。

TinUI2的最后一个重要使命,就是在过渡到TinUI3前,完成使用xml编写元素控件布局的功能,并且使其稳定。虽然是最后一个使命,但是前前后后囊括了很多个TinUI2的版本,从TinUI-2.6.0-开始到TinUI-2.20.0-。这里面包括很多更新:

  • xml结构设计

  • xml与Python内部的交互关系

  • Python代码编写规范(IDO)

  • xml的嵌套逻辑设计,本来的TinUIXml是没有打算嵌套的

  • ……

tux=TinUIXml(tinui)
tux.loadxml(xml)

TinUI2的最后一个版本在2022年3月发布,完成了基本控件的支持和元素组件的体系化。


TinUI3-稳定优化

2022年4月,迎来了首个TinUI3版本,TinUIXml终于稳定了。

同时,TinUI使用了新的开源协议:GPL-v3。

TinUI3主要是元素控件样式优化,以及添加拓展控件,也就是tkinter中不存在的控件。

元素优化主要以WinUI3作参考。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

以及动画设计,比如圆形等待框。

在这里插入图片描述

拓展空间则包括:多功能标签栏视图、支点标题、等待框、翻页视图等等。

此外,还有一个底层变化——FunctionList结构。

随着一些拓展元素组件的添加与完善,有一些组件必须要开放足够多的方法进行操作。然而,从TinUI2中继承的家底中,一直在使用列表结构作为方法总和的返回值,使用方法的写法如funcs[1](),看起来很不顺眼。所以后来一直都想使用如funcs.function()的方法,加上标签栏视图(notebook)的加入,这个要求就变成了急需。所以,这也就使得标签栏视图可以如以下方法调用:

nt.addpage(title='title',flag='flag1')
nt.showpage(flag='flag1')
#nt.deletepage('flag1')
nt.getuis('flag1')
nt.gettitles('flag1')
nt.getvdic()
nt.gettbdict()

在这里插入图片描述

虽然TinUI3是一个很稳定的阶段,但是因为一些原因,TinUI3会有一段暂停维护阶段,见:TinUI暂停维护

应该是TinUI4的时期会暂停维护。

以后会不会接续呢?我也不知道,毕竟我不是走这一条路的,或许有时间了会回过头来看一看。

关于申请为TinUI合作者,见信息公告

终于,在2022年10月22日,送走了TinUI3最后一个版本-3.34.0-。本来以为TinUI3是一个长期稳定的版本,但是随着treeview元素在TinUI4中提上开发日程,TinUI3也结束属于它的一个稳定发展时期了。


TinUI4-完备与新过渡

NEXT……
4.0将等待treeview控件的加入……

TinUI4在2023年1月1日发布。

首次更新就包括了treeview和image控件的加入,所有基本控件已经创建完毕。此外,TinUI4的一个最大特点就是随包发布了 TinUI帮助手册 实用程序,为编写者提供了快捷的文档查询、功能更新说明以及拓展开发注意事项说明。

在这里插入图片描述

在这里插入图片描述

TinUI基本就一直保持在TinUI4阶段了,毕竟我将来几乎没时间管它了。

随后也更新了其它控件的样式。
在这里插入图片描述

在这里插入图片描述


结语

看到这,相信读者已经了解了TinUI,是否使用、如何使用,也就看自己了。

【笔记】

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tinga_kilin/article/details/125970625

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法