写这篇文章时,正式版的TinUI框架已经开源一年多(一点点)了,这里暂且写一下TinUI的发展历程,让tkinter爱好者了解一些TinUI的发展路线、主旨,同时更好地运用TinUI这一个工具。
这里就按时间顺序来写了。
好吧,TinUI对我来说就像是课余时间的一个玩具,写写得了。
进入正题。
tkinter原生控件的样式属实有点……,当然,ttk的样式虽然是系统样式,但是细心的就会发现,ttk的哪里是使用系统控件,分明是在原生控件的基础上贴图。就拿按钮来说,在windows11上使用ttk,按钮是圆角,但是仔细看,边框是方形的。而且,点击按钮后,按钮就会出现一个虚线方框。其它windows系统上亦如此。
所以贴图类控件的开发着实麻烦,而且性能会大下降。
那用画布会如何?
当时我在写TinUI的时候还不知道隔壁CustomTkinter(CTK),那是由专业人员带头发起的,使用画布重绘现代样式的tkinter控件。后来发现同行,原来CTK是一个“重型”框架,与TinUI有本质上的区别。主要内容详见TinUI和customtkinter的区别_Smart-Space的博客-CSDN博客。
接着,就是尽可能使用一个画布,绘制出具有现代样式的控件元素,使其成为一个小的轻型框架。虽然有一些输入类控件(Canvas、Text、Entry)无法绘制,但是这仍然无法阻挡TinUI的元素样式渲染,以及超越tkinter原生控件的速度。
顺便提一下,TinUI的原型2019年就有了,那个时候是想写一个富文本排版器,但是觉得用文本框写更方便,所以就没有管它,这也是为什么TinUI有标题和段落控件。后来看不顺眼tkinter原生(毕竟ttk样式还要写style,很麻烦),就重启了这个小项目,命名为TinUI。
实际上,在2019年末,TinUI的文件主体已经创建。
只不过当时不叫这个名称,而是“TinCanvas”。顾名思义,当时这仍然是一个画布控件,用来作为TinEngine内部的画布,封装更加简单的画布方法。后来发现,没必要,或者说没有什么实现意义。就好比我现在几乎不管TinEngine了。
在2020年的时候,曾经停止了对于TinCanvas的开发。
但是,在2021年初,就产生了上文谈到的建立一个现代化元素控件框架。接着,便将相关代码从TinEngine中脱离出来,建立了TinUI.py。
2021年中考完后,便开始了对TinUI的构建。
这是最早的TinUI正式版本,于2021年7月首次发布在PYPI。
很简陋。里面的输入框相当于原封不动地添加标准输入框,按钮还是win10风格,复选框真的是啥也不是,单选框又“新颖独特”。这就是TinUI-1.0.0,pypi上的最早版本。
后来又加入了超链接、等待框等元素控件,这些是完全由画布绘制出来的。
可以看到这样的控件风格有一点点像上世纪的Windows风格。若果说刚开始的TinUI1是从一个废弃的项目转向新的目标,那么,很快,TinUI1的最后几个版本也将进入一个快速的过渡阶段。
不过最开始作为文本排版器的构想,虽然废弃了,但是一些历史遗留问题还是有的,比如元素组件添加方法统一以开头,仁者见仁智者见智。
随着表格元素(TinUI比较复杂地绘制的元素组件之一),以及使用新样式的输入框,TinUI已经完成了基础交互控件的创建。2021年10月,TinUI最后一个版本发布,接下来就是一个迅速完善的阶段了。
新的阶段,也是一个快速变化的阶段。
作为TinUI首个额外窗口元素控件,TinUI菜单补全了所有的窗口基本控件(虽然菜单比较简陋,但是后续会改进),也就是说,至此,TinUI提供的元素组件已经够用了,TinUI可以作为窗口唯一控件。其它还没有加入的控件,可以通过画布代码加入,以TreeView为例:
treeview在TinUI4中已提供。
接下来,就是2022年年初的TinUI更新,这次更新分离出来了TinUI和BasicTinUI两个类,开发重心也就转到了BasicTinUI,而TinUI则是在其基础上进行封装——可视滚动范围刷新、滚动条支持。而BasicTinUI则可以作为一个单独的TinUI元素渲染框架组件使用。
这也代表TinUI2的主要目标已经达成——一个稳定的元素控件渲染框架。不过,后面还是继续添加各种各样的控件,并且优化控件样式。比如输入框、复选框、按钮等等。
这是TinUI2的输入框,仿winui2。此后TinUI3的输入框则是仿winui3样式的圆角输入框。
TinUI2的最后一个重要使命,就是在过渡到TinUI3前,完成使用xml编写元素控件布局的功能,并且使其稳定。虽然是最后一个使命,但是前前后后囊括了很多个TinUI2的版本,从TinUI-2.6.0-开始到TinUI-2.20.0-。这里面包括很多更新:
-
xml结构设计
-
xml与Python内部的交互关系
-
Python代码编写规范(IDO)
-
xml的嵌套逻辑设计,本来的TinUIXml是没有打算嵌套的
-
……
TinUI2的最后一个版本在2022年3月发布,完成了基本控件的支持和元素组件的体系化。
2022年4月,迎来了首个TinUI3版本,TinUIXml终于稳定了。
同时,TinUI使用了新的开源协议:GPL-v3。
TinUI3主要是元素控件样式优化,以及添加拓展控件,也就是tkinter中不存在的控件。
元素优化主要以WinUI3作参考。
以及动画设计,比如圆形等待框。
拓展空间则包括:多功能标签栏视图、支点标题、等待框、翻页视图等等。
此外,还有一个底层变化——FunctionList结构。
随着一些拓展元素组件的添加与完善,有一些组件必须要开放足够多的方法进行操作。然而,从TinUI2中继承的家底中,一直在使用列表结构作为方法总和的返回值,使用方法的写法如,看起来很不顺眼。所以后来一直都想使用如的方法,加上标签栏视图(notebook)的加入,这个要求就变成了急需。所以,这也就使得标签栏视图可以如以下方法调用:
虽然TinUI3是一个很稳定的阶段,但是因为一些原因,TinUI3会有一段暂停维护阶段,见:TinUI暂停维护。
应该是TinUI4的时期会暂停维护。
以后会不会接续呢?我也不知道,毕竟我不是走这一条路的,或许有时间了会回过头来看一看。
关于申请为TinUI合作者,见信息公告。
终于,在2022年10月22日,送走了TinUI3最后一个版本-3.34.0-。本来以为TinUI3是一个长期稳定的版本,但是随着treeview元素在TinUI4中提上开发日程,TinUI3也结束属于它的一个稳定发展时期了。
NEXT……
4.0将等待treeview控件的加入……
TinUI4在2023年1月1日发布。
首次更新就包括了treeview和image控件的加入,所有基本控件已经创建完毕。此外,TinUI4的一个最大特点就是随包发布了 TinUI帮助手册 实用程序,为编写者提供了快捷的文档查询、功能更新说明以及拓展开发注意事项说明。
TinUI基本就一直保持在TinUI4阶段了,毕竟我将来几乎没时间管它了。
看到这,相信读者已经了解了TinUI,是否使用、如何使用,也就看自己了。