当前位置:网站首页>TinUI发展历程
TinUI发展历程
2022-07-26 19:38:00 【Smart-Space】
引言
写这篇文章时,正式版的TinUI框架已经开源一年多(一点点)了,这里暂且写一下TinUI的发展历程,让tkinter爱好者了解一些TinUI的发展路线、主旨,同时更好地运用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。
class TinUI(Canvas):
def __init__(self,master,...):
#...
TinUI1
这是最早的TinUI正式版本。

很简陋。里面的输入框相当于原封不动地添加标准输入框,按钮还是win10风格,复选框真的是啥也不是,单选框又“新颖独特”。这就是TinUI-1.0.0,pypi上的最早版本。
后来又加入了超链接、等待框等元素控件,这些是完全由画布绘制出来的。
可以看到这样的控件风格有一点点像上世纪的Windows风格。若果说刚开始的TinUI1是从一个废弃的项目转向新的目标,那么,很快,TinUI1的最后几个版本也将进入一个快速的过渡阶段。
不过最开始作为文本排版器的构想,虽然废弃了,但是一些历史遗留问题还是有的,比如元素组件添加方法统一以add_开头,仁者见仁智者见智。
tinui.add_title(...)
tinui.add_button(...)


随着表格元素(TinUI比较复杂地绘制的元素组件之一),以及使用新样式的输入框,TinUI已经完成了基础交互控件的创建,接下来就是一个迅速完善的阶段了。
TinUI2
新的阶段,也是一个快速变化的阶段。

作为TinUI首个额外窗口元素控件,TinUI菜单补全了所有的窗口基本控件(虽然菜单比较简陋,但是后续会改进),也就是说,至此,TinUI提供的元素组件已经够用了,TinUI可以作为窗口唯一控件。其它还没有加入的控件,可以通过画布代码加入,以TreeView为例:
tv=Treeview(tinui)
tinui.create_window(pos,window=tv,width=300,height=300)
接下来,就是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-开始。这里面包括很多更新:
xml结构设计
xml与Python内部的交互关系
Python代码编写规范(IDO)
xml的嵌套逻辑设计,本来的TinUIXml是没有打算嵌套的
……
tux=TinUIXml(tinui)
tux.loadxml(xml)
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暂停维护。
以后会不会接续呢?我也不知道,毕竟我不是走这一条路的,或许有时间了会回过头来看一看。
结语
看到这,相信读者已经了解了TinUI,是否使用、如何使用,也就看自己了。
【笔记】
边栏推荐
- Task 2 kaggle diabetes detection
- 记一次 .NET 某物管后台服务 卡死分析
- An open source web drawing board is really convenient
- QT信号与槽连接(松耦合)
- Silent desktop fan chip dltap703sd Jericho
- The first training course was a perfect success (๑ㅂ•) و*
- Shell script basic programming commands
- HM中如何获取CU块划分信息并用Matlab绘图
- URL格式
- Using questpdf operation to generate PDF is faster and more efficient!
猜你喜欢

How to build a super interface collaboration platform: count the six weapons of apifox
![[Android] the black technology behind kotlin's rapid compilation. Learn about it~](/img/d6/ae107f75c158e97913e6d75eac5b84.png)
[Android] the black technology behind kotlin's rapid compilation. Learn about it~

猿辅导的科技硬实力:让AI从读懂孩子作业开始

Cookie和Session

MySQL InnoDB engine (V)

【刷题记录】22. 括号生成

.NET GC工作流程

本机号码一键登录原理与应用(荣耀典藏版)

20220725 tree array introspection

超强接口协作平台如何打造:细数Apifox的六把武器
随机推荐
arpspoof 安装和使用
打字比赛圆满结束!
Kingbasees SQL language reference manual of Jincang database (20. SQL statements: merge to values)
App Uploader下载安装
并行执行(二)、multiprocessing
潘多尼亚精灵 VoxEdit 创作大赛
Week 6 Convolutional Neural Networks (CNNs)
用 QuestPDF操作生成PDF更快更高效!
numpy.zeros_ like
BUU刷题记2
MySQL InnoDB engine (V)
SQL注入
聊天软件项目开发2
Shell script basic programming commands
A little cool, explore space with.Net Maui
员工辞职还得赔偿公司损失?34岁机长辞职被公司索赔1066万
Servlet
Exchange 2010 SSL certificate installation document
Usage of Smoothscroll Polyfill plug-in
smoothscroll-polyfill插件的用法