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

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签