TinUI配色样式基类TinUITheme
引言
在2022年的一篇笔记中,我想到了给TinUI提供一个样式配色的方式,不过当时刚开始设想TinUITheme
不久,后又没有持续更新,导致一直没有把TinUI的统一配色方式讲明白。
刚开始也不存在
TinUITheme
,这是后话。
本文将从TinUI的样式基类开始说起。
TinUITheme类
TinUITheme
是定义在TinUI核心中的一个类。
class TinUITheme:
'''
专门为特有样式的TinUI或BasicTinUI提供的类
适用于重写样式配色的TinUI或BasicTinUI
该类允许重写样式的TinUI或BasicTinUI使用TinUIXml
'''
def __init__(self,ui,name='tinui-theme'):
self.theme=name
self.ui=ui
self.bbox=ui.bbox
def change_theme_name(self,name:str):
self.theme=name
def get_theme(self):
return self.theme
这个类没有任何实际用处,唯一的用处就是让其他所有的样式配色类都要继承这个类,确定名称和所绑定的BasicTinUI或TinUI。
从三行注释中也可以发现,这个类的另一个用处是可以直接搭配TinUIXml使用。这应该是TinUI-v4推出的功能,即TinUIXml可以绑定在一个TinUITheme样式类上,但同时样式类也必须绑定在一个存在的UI框架上。
TinUI自身提供的配色样式类
TinUI项目中实时维护的配色样式类只有两个:tinuidark.py
, tinuilight,py
。
这里以明亮样式tinuilight.py
为例:
class TinUILight(TinUITheme):
def __init__(self, ui:Union[TinUI, BasicTinUI])
super().__init__(ui,'tinui-light-theme')
self.label='light'
self.ui['background']='#f3f3f3'
def add_button(self,pos,*arg,**kw):
return self.ui.add_button(pos,fg='#1b1b1b',bg='#fbfbfb',
activefg='#1a1a1a',activebg='#f6f6f6',
line='#cccccc',linew=1,activeline='#cccccc',
*arg,**kw)
def add_checkbutton(self,pos,*arg,**kw):
return self.ui.add_checkbutton(pos,
fontfg='#1a1a1a',fg='#868686',bg='#ededed',
activefg='#868686',activebg='#e5e5e5',
onfg='white',onbg='#334ac0',
*arg,**kw)
# ...
在初始化函数中,就确定了样式名称和绑定的UI框架背景色,前者不是必须的,只是习惯。
接下来,会给这个类如数添加BasicTinUI已经存在的控件添加函数,这些函数有如下需求:
- 这些函数和控件创建函数必须要接受pos参数,无论是否真的存在这个参数需要用到
- 除了色彩参数,其他一律原封不动传递给真实的控件创建函数
- 对每一个控件添加上具体的配色
这样,无论是直接调用这个类,还是使用TinUIXml,都无需一一更改控件颜色。
函数名可以是任意
add_<...>(...)
,也可以自定义控件,具体见TinUIXml实现源码,总之,返回值无论单个还是多个,最后一个必须是创建的所有控件的画布uid。
其它配色
在2025年的TinUI项目中,还存在tinuimoderndark.py
, tinuimodernlight.py
等文件,这是由chatglm-4生成的,不会持续维护。
画廊
明亮样式
tinuilight
现代黑暗样式
这个样式配色由chatglm-4生成
tinuiaidark
其他由AI生成的配色
这一段纯粹是用来玩的。