TinUI



项目类型

TinUI是一个基于tkinter(Python/tcl/tk)的拓展组件(Widget),可以绘制具有现代化样式的控件。

TinUI基于tkinter的画布(Canvas),可以作为整个窗口的唯一控件。TinUI能够通过自身绘制出功能组件和文字,也可以使用画布功能添加组件。使用TinUI,可以使界面设计和代码设计分离,此外,TinUI绘制的虚拟组件速度更快,样式更加丰富。

目前,TinUI可用于常规tkinter窗口开发。

依赖

目前,TinUI没有依赖项目。

开源协议

TinUI使用GPLv3(GPL)作为开源协议。

非商业软件,TinUI部分代码必须开源,即使源码被修改。开源的TinUI部分代码必须采用同样的开源协议——GPL,并且注明开发者 Smart-Space(Junming Zhang),以及GitHub/TinUI的开源代码库:https://github.com/Smart-Space/TinUI/

商业软件,需要添加TinUI的gpl-3.0.md的开源许可,为自身使用TinUI做出声明,并且公开TinUI部分的代码。此外,需要注明开发者Smart-Space(Junming Zhang)对TinUI的版权所有,以及GitHub/TinUI的开源代码库:https://github.com/Smart-Space/TinUI/

简单示例

以下是一段简易TinUI代码示例:

from tkinter import Tk
#from tinui.TinUI import TinUI #导入TinUI
from tinui import TinUI

def dop(cont):#处理输入框返回事件
    print(f'输入框内容为:{cont}')

r=Tk()
r.geometry('500x500+10+10')

ui=TinUI(r)
ui.pack(fill='both',expand=True)#填充窗口

#绘制若干个按钮
ui.add_button((5,5),text='one')
ui.add_button((55,5),text='two1')
ui.add_button((55,40),text='two2')
ui.add_button((110,5),text='three')

#绘制一个输入框,并绑定到处理函数:dop
ui.add_entry((5,180),350,'这里用来输入',command=dop)

r.mainloop()

更新日志

TinUI更新日志

贡献者

TinUI贡献者列表


Class: TinUI(BasicTinUI)

TinUI模块的主类,基于 Class: BasicTinUI

创建TinUI

tinui=TinUI(root,bg='white',update=True,update_time=1000)
'''
update:bool::是否实时更新滚动画面
update_time:int::每次更新滚动画面的间隔(毫秒)
**kw::Canvas的参数
'''

基础函数

所有函数均会返回主要画布对象。TinUI.add_...(...)

clean_windows()

清除浮出控件的子窗口,需要开发者手动释放子窗口。


show_location(state=True,color=’red’,command=None)

state::是否显示十字坐标确定线

color::线条颜色

command::反馈函数,应当接受两个参数,x, y

启用十字定位并反馈鼠标所在位置的坐标。


add_title(self,pos:tuple,text:str,fg=’black’,font=’微软雅黑’,size=1,anchor=’nw’,**kw)

绘制一个大字体标题。

return: title


add_paragraph(self,pos:tuple,text:str,fg=’black’,font=(‘微软雅黑’,12),side=’left’,width=500,anchor=’nw’,**kw)

绘制一个段落。

return: paragraph


add_button(self,pos:tuple,text:str,fg=’black’,bg=’#CCCCCC’,line=’#CCCCCC’,linew=3,activefg=’black’,activebg=’#999999’,activeline=’#7a7a7a’,font=(‘微软雅黑’,12),minwidth=0,maxwidth=0,command=None,anchor=’nw’)

绘制一个按钮。这个按钮会响应鼠标的离开和进入事件,被单击时也会调用绑定的函数。

return: button_text, button_back, funcs, uid

button_text::按钮文本

button_back::按钮背景

funcs

funcs[0]|funcs.change_command(new_func)::为按钮绑定新函数

funcs[1]|funcs.disable(fg='#7a7a7a',bg='#cccccc')::禁用按钮

funcs[2]|funcs.active()::激活按钮


add_label(self,pos:tuple,text:str,fg=’black’,bg=’#f0f0f0’,outline=’grey’,font=(‘微软雅黑’,12),anchor=’nw’)

绘制一个类Label组件。

return: label, uid


add_checkbutton(self,pos:tuple,text:str,fontfg=’black’,fg=’#868686’,bg=’#ededed’,activefg=’#868686’,activebg=’#e5e5e5’,onfg=’white’,onbg=’#334ac0’,font=(‘微软雅黑’,12),command=None,anchor=’nw’)

绘制一个复选框。这个复选框会响应鼠标的离开和进入事件,被单击时也会调用绑定的函数,并且会根据当前样式更改点击后的样式。

return: check_text, check_mark, funcs, uid

check_text::复选框文本

check_mark::复选框矩形标记部件,除边框

funcs

funcs[0]|funcs.flash()::切换复选框状态

funcs[1]|funcs.on()::选定

funcs[2]|funcs.off()::取消选定

funcs[3]|funcs.disable()::禁用

funcs[4]|funcs.active()::激活


add_entry(self,pos:tuple,width:int,text:str=’‘,fg=’#606060’,bg=’#f6f6f6’,activefg=’#1b1b1b’,activebg=’#ffffff’,line=’#e5e5e5’,activeline=’#e5e5e5’,insert=’#808080’,font=(‘微软雅黑’,12),linew=3,outline=’#868686’,onoutline=’#3041d8’,icon=’>’,anchor=’nw’,call=’→’,command=None)

绘制一个单行输入框。这是一个半绘制组件,其实就是简化了Entry控件的导入。

通过 entry.get()获取值。

return: entry, funcs, uid

entry::输入框类(控件)

funcs

funcs.get()::获取输入内容

funcs.error(errorline='#c42b1c')::显示错误样式

funcs.normal()::回复正常样式

funcs.disable()::禁用输入框


add_separate(self,pos:tuple,width:int,direction=’x’,fg=’grey’,anchor=’nw’)

绘制一条分割线。

return: separate


add_radiobutton(self,pos:tuple,width,text=’‘,choices=(‘choose me’),fg=’#1a1a1a’,bg=’#f2f2f2’,font=(‘微软雅黑’,12),activefg=’#3c3c3c’,activebg=’#e9e9e9’,command=None,anchor=’nw’)

绘制一个单选框,竖式排列。

return: text, choices_text_list, choices_back, funcs, uid

text::文本提示画布对象

choices_text_list::可选框的文本画布对象

choices_back::可选框的背景方框画布对象

funcs

funcs[0]|funcs.select(num)::选定一个选项

funcs[1]|funcs.disable()::禁用

funcs[2]|funcs.active()::激活


add_link(self,pos:tuple,text,url:Union[str,FunctionType],fg=’#4f62ca’,activefg=’red’,activebg=’#eaeaea’,font:tuple=(‘微软雅黑’,12),anchor=’nw’)

绘制一个链接文本,指向网页或者执行函数或者指向目标函数。

link::链接文本

funcs

funcs[0]|funcs.disable(fg='#b0b0b0')::禁用链接

funcs[1]|funcs.active()::恢复链接


add_waitbar1(self,pos:tuple,fg=’#0078D7’,bg=’‘,okfg=’lightgreen’,okbg=’‘,bd=5,r=20,anchor=’nw’)

绘制一个扇形等待框。

return: waitbar1, ok, uid

waitbar1::该画布对象

ok::停止等待动画的函数。当你完成你需要等待的任务后,你可以调用此函数,停止等待动画


add_labelframe(self,widgets:tuple=(),title=’‘,font=’微软雅黑 10’,fg=’#A8A8A8’,bg=’‘)

绘制一个标题框,以包含所制定的所有画布对象。

return: label, back, outline, uid

label::标题文本

back::背景元素

outline::边框元素


add_waitbar2(self,pos:tuple,width:int=200,fg=’#3041d8’,bg=’#f3f3f3’,okcolor=’#0f7b0f’,anchor=’nw’)

绘制一个点状运动的等待框。

return: back, balls:list, stop, uid

back::背景矩形画布对象

balls::五个圆形画布对象的列表

stop::停止等待动画的函数。当你完成你需要等待的任务后,你可以调用此函数,停止等待动画


add_combobox(self,pos:tuple,width:int=200,height:int=200,text=’‘,content:tuple=(),fg=’#1a1a1a’,bg=’#f8f8f8’,outline=’#c8c8c8’,activefg=’#191919’,activebg=’#f1f1f1’,scrollbg=’#f0f0f0’,scrollcolor=’#999999’,scrollon=’#89898b’,tran=’#01FF11’,font=(‘微软雅黑’,12),anchor=’nw’,command=None)

绘制一个组合框。

return: main, back, bar, funcs, uid

main::显示框文字

back::显示框背景

bar::载有选项listview控件的BasicTinUI

funcs

funcs[0]|funcs.select(num)::选定选值,第一个值是0

funcs[1]|funcs.disable(fg='#9d9d9d',bg='#f5f5f5')::禁用

funcs[2]|funcs.active()::激活


add_progressbar(self,pos:tuple,width=250,fg=’#868686’,bg=’#334ac0’,back=’#f3f3f3’,fontc=’#79b8f8’,percentage=True,text=’‘,anchor=’nw’)

绘制一个进度条。

不提供进度动画,动画效果需要自己实现,参考 TinUI.pytest4()函数。

return: back, pro_tagname, text, goto, funcs, uid

back::背景矩形边框

pro_tagname::进度框矩形所代表的tag名称

text::进度条文本

goto::改变进度:goto(num:int),其中,num∈[0,100]。这将改变组件进度指示

funcs

funcs[0]|funcs.now_running()::恢复常规样式

funcs[1]|funcs.now_paused(fg='#868686',bg='#9d5d00',fontc='#cdcdcd')::改为暂停样式

funcs[2]|funcs.now_error(fg='#868686',bg='#c42b1c',fontc='#cdcdcd')::改为因错误暂停样式


add_table(self,pos:tuple,outline=’#E1E1E1’,fg=’black’,bg=’white’,data=[[‘1’,’2’,’3’],[‘a’,’b’,’c’]],minwidth=100,maxwidth=300,font=(‘微软雅黑’,12),headbg=’#d9ebf9’,anchor=’nw’)

绘制一个表格。

return: uid

表格组件绘制较复杂,涉及到列宽度、行最大高度等内容,目前只返回整体画布tag


add_onoff(self,pos:tuple,fg=’#575757’,bg=’#e5e5e5’,onfg=’#FFFFFF’,onbg=’#3041d8’,anchor=’nw’,command=None)

绘制一个开关。

return: state, back, outline, funcs, uid

state::开关标识符

back::背景

outline::边框,与背景为同一个类型,比背景尺寸稍大

funcs

funcs.on::开启

funcs.off::关闭

funcs.active::启用

fucns.disable(dfg='#f0f0f0',dbg='#bfbfbf')::禁用


add_spinbox(self,pos:tuple,width=150,data=(‘1’,’2’,’3’),now=’‘,fg=’#1b1b1b’,bg=’#ffffff’,line=’#e5e5e5’,activefg=’#818181’,activebg=’#f2f2f2’,font=(‘微软雅黑’,12),anchor=’nw’,command=None)

command返回值为 string:TinUIStringstring为值本身,来自于 data

string.num为值在 data中的索引,从 0开始。

绘制一个选值框。

return: wentry, button1, button2, back, outline, uid

wentry::输入框组件

button1::上调按钮

button2::下调按钮

back::背景元素

outline::边框元素


add_scalebar(self,pos:tuple,width=200,fg=’#4554dc’,activefg=’#4554dc’,bg=’#868686’,buttonbg=’#ffffff’,buttonoutline=’#cccccc’,data=(1,2,3,4,5),start=1,anchor=’nw’,command=None)

绘制一个滑动调节框。

return: name, back, button, funcs, uid

name::选值覆盖区域的tag名称

back::选值未覆盖区域的画布对象

button::选值滑动按钮

funcs

funcs[0]|funcs.select(num)::选定选值,第一个值是0

funcs[1]|funcs.disable()::禁用

funcs[2]|funcs._active()::激活


add_info(self,pos:tuple,info=’info’,font=’微软雅黑 9’,fg=’#0078d4’,bg=’white’,info_text=’‘,info_font=(‘微软雅黑’,’12’),info_width=200,info_fg=’black’,width=400,anchor=’nw’)

绘制一个气泡提示框组件。

return: text, back, uid

text::标识符文本

back::标识符背景边框


add_menubar(self,cid=’all’,bind=’<Button-3>‘,font=’微软雅黑 12’,fg=’#1b1b1b’,bg=’#fbfbfc’,line=’#e3e3e3’,activefg=’#1a1a1a’,activebg=’#f2f2f3’,cont=((‘command’,print(‘’)),’-‘),tran=’#01FF11’)

cont的格式如下:

(('名称',绑定的函数(接受event参数)),#常规格式
'-',#分割线
...,
)

为绑定的画布对象被指定事件激活后,显示菜单。

return: menu, bar, funcs

menu::菜单窗口(Toplevel)

bar::菜单窗口中的TinUI

funcs::所有菜单按钮的函数集,每一个元素为每一个TinUI按钮的函数集


add_tooltip(self,uid,text=’‘,fg=’#3b3b3b’,bg=’#e7e7e7’,outline=’#3b3b3b’,font=’微软雅黑 12’,tran=’#01FF11’,delay=0,width=400)

绘制一个信息提示窗口。

return: get_return

get_return::函数,获取toti(提示窗口)和bar(其中的TinUI)


add_back(self,pos:tuple,uids:tuple=(),fg=’‘,bg=’‘,linew=0)

绘制一个背景框或间隔框,优先考虑 uids参数。

return: back

效果见tooltip控件中绑定的label控件背景。


add_waitbar3(self,pos:tuple,width:int=200,fg=’#3041d8’,bg=’#f3f3f3’,okcolor=’#0f7b0f’,anchor=’nw’)

绘制一个带状等待框。

return: back, bar, stop, uid

back::背景框

bar::动画块

stop::停止等待动画的函数。当你完成你需要等待的任务后,你可以调用此函数,停止等待动画


add_textbox(self,pos:tuple,width:int=200,height:int=200,text:str=’‘,anchor=’nw’,font=’微软雅黑 12’,fg=’black’,bg=’white’,linew=3,scrollbar=False,outline=’#63676b’,onoutline=’#3041d8’,scrollbg=’#f0f0f0’,scrollcolor=’#999999’,scrollon=’#89898b’)

绘制一个文本编辑框。

return: textbox, funcs, uid

textbox::Text控件

funcs

funcs.get(start='1.0',end='end')::获取输入

funcs.delete(start='1.0',end='end')::删除内容

funcs.config(**kw)::设置Text属性


add_scrollbar(self,pos:tuple,widget,height:int=200,direction=’y’,bg=’#f0f0f0’,color=’#999999’,oncolor=’#89898b’)

为显示区域可变的组件绘制一个滚动条。

return: top, bottom, back, sc, uid

top::上(左)标识

bottom::下(右)标识

back::背景

sc::滚动块


add_listbox(self,pos:tuple,width:int=200,height:int=200,font=’微软雅黑 12’,data=(‘a’,’b’,’c’),bg=’#f2f2f2’,fg=’black’,activebg=’#e9e9e9’,sel=’#b4bbea’,scrollbg=’#f0f0f0’,scrollcolor=’#999999’,scrollon=’#89898b’,anchor=’nw’,command=None)

绘制一个列表框。

return: box, funcs, uid

box::绘制列表框功能区的BasicTinUI

funcs

funcs.add(text:str)::在尾部添加新选项

funcs.delete(index:int)::删除指定序数的元素,第一个元素序号为0


add_canvas(self,pos:tuple,width:int=200,height:int=200,bg=’white’,outline=’#808080’,scrollbg=’#f0f0f0’,scrollcolor=’#999999’,scrollon=’#89898b’,linew=1,scrollbar=False,anchor=’nw’)

绘制一个画布。

return: canvas, re_scrollregion, uid

canvas::画布组件

re_scrollregion::刷新滚动范围,标记为“all”


add_ui(self,pos:tuple,width:int=200,height:int=200,bg=’white’,scrollbg=’#f0f0f0’,scrollcolor=’#999999’,scrollon=’#89898b’,scrollbar=False,region=’man’,anchor=’nw’)

添加一个内嵌BasicTinUI。

return: ui, re_scrollregion, ui_xml, uid

ui::BasicTinUI类

re_scrollregion::刷新滚动范围,如果 region参数为“auto”可忽略

ui_xml::该BasicTinUI类的TinUIXml绑定


add_pipspager(self,pos:tuple,width:int=200,height:int=200,bg=’#f3f3f3’,fg=’#898989’,activefg=’#5d5d5d’,buttonbg=’#f8f8f8’,activebg=’#f8f8f8’,num:int=2)

绘制一个横向翻页视图。

return: uilist, dotlist, move_to, uid

uilist::视图列表结构。[(id-1,tinui-1,tinuixml-1),...]

dotlist::导航栏列表结构。[dot_id-1,...]

move_to::需要一个数字参数num,转到第num个视图,第一个视图num为0


add_notebook(self,pos:tuple,width:int=400,height:int=400,color=’#f3f3f3’,fg=’#5d5d5d’,bg=’#f3f3f3’,activefg=’#595959’,activebg=’#e9e9e9’,onfg=’#1a1a1a’,onbg=’#f9f9f9’,scrollbg=’#f0f0f0’,scrollcolor=’#999999’,scrollon=’#89898b’)

绘制一个标签栏视图。

return: tbu, scro, back, notebook, uid

tbu::标签栏BasicTinUI

scro::滚动条TinUI返回值

back::背景元素

notebook::TinUINum函数结构体

notebook.addpage(title,flag=None,scrollbar=False,cancancel=True)->flag

title标签栏标签标题

flag标识符,如果没有给定,会自动生成并返回

scrollbar是否使用TinUI,默认BasicTinUI

cancancel该页面是否能被删除

notebook.showpage(flag)

flag需要显示的页面的标识符

notebook.deletepage(flag)

flag需要删除的页面的标识符

notebook.getuis(flag)->(tinui,uixml,uiid)

flag页面标识符。返回TinUI组件、TinUIXml绑定、组件的画布对象

notebook.gettitles(flag)->(title,cb,bu)

flag页面标识符。返回标题tbu对象、删除键tbu对象、标签tbu对象

notebook.getvdic()->vdict

返回页面字典

notebook.gettbdict()->tbdict

返回标签栏字典

notebook.cannew(can=False,newfunc=None)

can是否响应&显示新界面按钮

newfunc响应函数,如果为None则不执行

notebook.newtitle(flag,title_text=’’)

flag需要更换标题的页面的标识符

title_text新标题文本


add_ratingbar(self,pos:tuple,fg=’#585858’,bg=’#f3f3f3’,onfg=’#3041d8’,onbg=’#3041d8’,size=12,num:int=5,linew:int=10,command=None)

绘制一个评星级控件。

return: bars, uid

bars::评星级元素列表

当只选定一个星级,再次选择第一个星级时,取消选择,command个数为0


add_radiobox(self,pos:tuple,fontfg=’black’,font=’微软雅黑 12’,fg=’#8b8b8b’,bg=’#ededed’,activefg=’#898989’,activebg=’#e5e5e5’,onfg=’#3041d8’,onbg=’#ffffff’,content:tuple=(‘1’,’’,’2’),padx=15,pady=10,anchor=’nw’,command=None)

绘制一个单选组控件。

return: boxes, funcs, uid

boxes::元素组:(标识符背景, 标识符, 文本, 背景元素)

funcs

funcs.active()::激活控件

funcs.disable(fg='#c1c1c1',bg='#f3f3f3')::禁用控件


add_notecard(self,pos:tuple,title=’note’,text=’note text\nmain content’,tfg=’black’,tbg=’#fbfbfb’,fg=’black’,bg=’#f4f4f4’,sep=’#e5e5e5’,width=200,font=’微软雅黑 12’)

绘制一个可拖动的便笺。

return: toptext, content, uid

toptext::标题文本

content::内容文本


add_pivot(self,pos:tuple,fg=’#959595’,bg=’‘,activefg=’#525252’,activecolor=’#5969e0’,content=((‘a-title’,’tag1’),(‘b-title’,’tag2’),’’,(‘c-title’,’tag3’)),font=’微软雅黑 16’,padx=10,pady=10,anchor=’nw’,command=None)

绘制一个支点标题。

return: texts, uid


add_button2(self,pos:tuple,text:str,icon=None,compound=’left’,fg=’#1b1b1b’,bg=’#fbfbfb’,line=’#CCCCCC’,linew=1,activefg=’#5d5d5d’,activebg=’#f5f5f5’,activeline=’#e5e5e5’,font=(‘微软雅黑’,12),minwidth=0,maxwidth=0,command=None,anchor=’nw’)

绘制一个圆角按钮。

return: button, back, outline, funcs, uid

button::按钮文本

back::背景元素

outline::边框元素

funcs

funcs.change_command(new_func)

new_func切换的新函数

funcs.disable(fg=’#9d9d9d’,bg=’#f5f5f5’)

禁用按钮

funcs.active()

激活按钮


add_expander(self,pos:tuple,title=’expand content’,tfg=’black’,tbg=’#fbfbfb’,bg=’#f4f4f4’,sep=’#e5e5e5’,width=200,height=200,scrollbar=False,font=’微软雅黑 12’)

绘制一个可折叠UI。

return: toptext, ui, ux, uid

toptext::标题文本

ui::BasicTinUI或TinUI

ux::绑定到UI的TinUIXml


add_waitframe(self,pos:tuple,width=300,height=300,fg=’#e0e0e0’,bg=’#ececee’,anchor=’nw’)

绘制一个元素等待框。

return: frame, itemfg, itembg, funcs, uid

frame::元素框控件(BasicTinUI)

itemfg::标识元素1

itembg::标识元素2

funcs

funcs.start()::开启等待覆盖

funcs.end()::结束等待覆盖


add_listview(self,pos:tuple,width=300,height=300,linew=80,bg=’#f3f3f3’,activebg=’#eaeaea’,oncolor=’#3041d8’,scrobg=’#f8f8f8’,scroc=’#999999’,scrooc=’#89898b’,num=5,command=None)

绘制一个列表视图。

return: ui, scro, items, funcs, uid

ui::列表框架BasicTinUI

scro::滚动条返回值,add_scrollbar

items::元素列表,每个元素为ui返回值,add_ui。进返回初始元素列表

funcs

funcs.getitems()获取当前所有元素列表

funcs.getui(index)获取index对应的add_ui返回值

funcs.delete(index)删除index位的UI元素

funcs.add()在末尾追加新元素,并且返回add_ui返回值


add_treeview(self,pos:tuple,fg=’#1a1a1a’,bg=’#f3f3f3’,onfg=’#1a1a1a’,onbg=’#eaeaea’,oncolor=’#3041d8’,signcolor=’#8a8a8a’,width=200,height=300,font=’微软雅黑 12’,content=((‘one’,(‘1’,’2’,’3’)),’two’,(‘three’,(‘a’,(‘b’,(‘b1’,’b2’,’b3’)),’c’)),’four’),command=None)

绘制一个树状图。

return: items, items_dict, box, uid

items::所有元素id对应的文本id、背景id,以及可能的伸缩提示文本id的字典

items_dict::所有含子级元素id对应下一级id的字典

box::作为树状图父组件的BasicTinUI


add_image(self,pos:tuple,width=None,height=None,state=’fill’,imgfile=None,anchor=’nw’)

绘制一个静态图片。

return: img

img::图片画布对象,相当于大多数的 uid


add_togglebutton(self,pos:tuple,text:str,fg=’#1b1b1b’,bg=’#fbfbfb’,line=’#CCCCCC’,linew=1,activefg=’#f3f4fd’,activebg=’#3041d8’,activeline=’#5360de’,font=(‘微软雅黑’,12),command=None,anchor=’nw’)

绘制一个状态开关按钮。

return: button, back, outline, funcs, uid

button::文本元素

back::背景元素

outline::边框元素

funcs

funcs.change_command()::更换响应函数

funcs.disable(fg='#9d9d9d',bg='#f5f5f5')::禁用

funcs.active()::启用


add_swipecontrol(self,pos:tuple,text:str=’‘,height=50,width=400,fg=’#1a1a1a’,bg=’#f3f3f3’,line=’#fbfbfb’,data:dict=,),’right’:(,)},font=(‘微软雅黑’,12),anchor=’nw’)

绘制一个滑动控件。

return: back, backitem

back::容器BasicTinUI

backitem::控件的画布元素


add_passwordbox(self,pos:tuple,width:int,fg=’#606060’,bg=’#f6f6f6’,activefg=’#1b1b1b’,activebg=’#ffffff’,line=’#e5e5e5’,activeline=’#e5e5e5’,insert=’#808080’,font=(‘微软雅黑’,12),linew=3,outline=’#868686’,onoutline=’#3041d8’,anchor=’nw’,command=None)

绘制一个密码输入框。

return: entry, funcs, uid


add_picker(self,pos:tuple,height=250,fg=’#1b1b1b’,bg=’#fbfbfb’,outline=’#ececec’,activefg=’#1b1b1b’,activebg=’#f6f6f6’,onfg=’#eaecfb’,onbg=’#3748d9’,font=(‘微软雅黑’,10),text=((‘year’,60),(‘season’,100),),data=((‘2022’,’2023’,’2024’),(‘spring’,’summer’,’autumn’,’winter’)),tran=’#01FF11’,anchor=’nw’,command=None)

绘制一个滚动选值框。

return: picker, bar, texts, pickerbars, uid

picker::选择器所在的窗口

bar::选择器所在的BasicTinUI

texts::文本元素列表

pickerbars::元素选择BasicTinUI列表


add_menubutton(self,pos:tuple,text:str,side=’y’,fg=’#1b1b1b’,bg=’#fbfbfb’,line=’#CCCCCC’,linew=1,activefg=’#5d5d5d’,activebg=’#f5f5f5’,activeline=’#e5e5e5’,font=(‘微软雅黑’,12),cont=((‘command’,print),’-‘),tran=’#01FF11’)

cont的格式如下:

(('名称',绑定的函数(接受event参数)),#常规格式
'-',#分割线
...,
)

绘制一个菜单按钮。

return: text, back, outline, funcs, uid

text-文本元素,包括标识文本

back-背景元素

outline-边框元素

funcs

funcs.disable(fg=’#9d9d9d’,bg=’#f5f5f5’)

禁用按钮

funcs.active()

激活按钮


add_barbutton(self,pos:tuple,font=’微软雅黑 14’,fg=’#636363’,bg=’#f3f3f3’,line=’#f3f3f3’,linew=0,activefg=’#191919’,activebg=’#eaeaea’,activeline=’#eaeaea’,sepcolor=’#e6e6e6’,content=((‘保存’,’\uE74E’,None),(‘’,’\uE792’,None),’’,(‘’,’\uE74D’,None)),anchor=’nw’)

绘制一个工具栏按钮组件。

return outline, back, buttons, uid

outline::边框元素

back::背景板元素

buttons::按顺序的所有按钮列表,每一个值为 add_button2()的返回值


Class: BasicTinUI

TinUI的基础类,仅提供组件绘制。

BasicTinUI的用法与TinUI完全一致,虽然TinUI基于BasicTinUI,但是TinUI更适合作为窗口主组件,以下是二者区别:

项目 BasicTinUI TinUI
TinUI绘制组件
自动刷新 ×
滚动条支持 ×
窗口主组件 ×
主窗口 ×
区域渲染组件 ×

Class: TinUIDialog

TinUIDialog是一个基础类,使用时无需在意,只需要从tinui包中导入相关对话框函数即可。

from tinui import show_msg

不过,show_msg是一个“朴素”的信息提示框,一般情况下应当导入以下对话框函数:

from tinui import show_info, show_success, show_error,\
    show_warning, show_question,\
    ask_string, ask_integer, ask_float, ask_choice
"""
上述分别对应:
信息提示
成功提示
警告提示
错误提示
问答提示
文本输入
整数输入
浮点输入
单选输入
"""

show_msg为例。

def show_msg(master,title,content,yestext='OK',notext='Cancel'):
    """
    master - 父窗口
    title - 标题
    context - 信息内容
    yestext - 确认文本
    notext - 取消文本
    """
    ...

对话框只有在“确认按钮”被点击后才返回交互值。


Class: extension

TinUI拓展工具包,通过from tinui import extension导入。

extension目前含有如下方法:

buttonlize(tinui,uid,bg=’#fbfbfb’,line=’#CCCCCC’,activebg=’#f5f5f5’,activeline=’#e5e5e5’,command=None)

注意,如果元素控件组(uid)中含有按钮之类的响应点击的控件,点击时会同时触发控件响应函数和该函数。


Class: FuncList

TinUI控件使用的方法列表,既可以当做列表获取返回函数,也可以作为函数整体对象执行单个方法。以button为例:

使用button的禁用方法(已获取 funcs返回值)。既可以使用 funcs[1](),也可以使用 funcs.disable()。方便使用。

本文档中比较久之前的函数返回调用,沿用最初列表式结构说明,具体返回的 FuncList类见源码。

无论怎样,使用 funcs.<function-name>是正确的。


Class: TinUITheme

TinUI自定义配色类。可实例化后直接应用于TinUIXml。

class TinUITheme:
    '''
    专门为特有样式的TinUI或BasicTinUI提供的类
    适用于重写样式配色的TinUI或BasicTinUI
    该类允许重写样式的TinUI或BasicTinUI使用TinUIXml
    '''

    def __init__(self,ui,name='tinui-theme'):
        #ui为TinUI框架

使用示例见开源TinUI代码库见 theme\themelight.py等。


Class: TinUIWidget

创建一个含单个元素控件的BasicTinUI组件。

class TinUIWidget(BasicTinUI):
    '''提供含单个元素控件的TinUI控件,用来在普通tkinter组件中使用'''

    def __init__(self,master,widget_name='ui',**kw):
        BasicTinUI.__init__(self,master,**kw)
        self.func=eval('self.add_'+widget_name)
        self.width=None
        self.height=None

get_size()

获取元素控件尺寸。

load(*args,**kw)

根据初始化的 widget_name,创建元素控件。

reupdate()

更新尺寸信息,但不会更改控件大小。


Class: TinUIXml

使用xml语言来绘制TinUI组件,当然,也包括BasicTinUI。

当前,menubar,tooltip等组件不支持使用xml布局。

class TinUIXml():#TinUI的xml渲染方式
    '''为TinUI提供更加方便的平面方式,使用xml
    TinUITheme基类无法直接使用,只能够重写TinUI或BasicTinUI的样式后才能够使用,参考 /theme 中的样式重写范例
    '''

    def __init__(self,ui:Union[BasicTinUI,TinUITheme]):
        #BasicTinUI包括TinUI
        #TinUITheme为样式基础类,继承类也可

基础类变量

self.funcs::xml中涉及到的函数

通常用与 command参数。

self.datas::xml中使用的特殊数据结构

通常用于 data等参数,但若数据结构不复杂,可以直接在xml中用字符表示。

如 ‘200’,’(“1”,”2”,”3”,”4”)’等数据结构可以直接在字符串中表示。

self.tags::内部组件tag集合

用于有目标文本的xml-TinUI组件元素的回调。

<button text='test'>bu</button>可以使用 *.tags['bu']获取原组件返回值。

基本规则

以下是使用 TinUIXml中xml字符串的若干规定:

  1. 根元素必须是 <tinui>

  2. 行元素必须是 <line>

  3. 根元素的直接子集不能有除了行元素的其它元素

  4. 行元素可以嵌套

    可以如下写法:

    <tinui>
    <line>
          <button text='one'></button>
    </line>
    <line>
        <button text='two'></button>
        <line>
            <button text='three'></button>
        </line>
        <line>
            <button text='four'></button>
        </line>
        <button text='five'></button>
    </line>
    </tinui>
    
  5. 所有xml使用的函数需要使用字符串中表述为 self.funcs[...]

    即:

    <button text='one' command='self.funcs["funcstion"]'></button>
    
  6. 若需要,如【5】中类似地使用 self.datas[...]

  7. 若需要使用整数定义宽度参数等,也如同 width='200'使用

  8. 字体使用如 font="微软雅黑 12"的写法

基本语法

使用 TinUIXml,有特殊的语法和协定,详情见CSDN文章:

tkinter-TinUI使用xml编写界面

基础函数

loadxml(xml:str)

xml::xml语言

通过一定规范的Xml字符串来对TinUI(BasicTinUI)进行渲染操作。

environment(dict_item:dict)

dict_item::一个字典,建议是 globals()locals()

根据本地变量,快速导入 funcsdatas。但这样会缺少规范性。

clean()

清空绑定的TinUI或BasicTinUI,同时会触发 ui.clean_windows()

特殊规则组件

部分组件的xml写法有特殊规定。

部分组件的特殊规定,详情见CSDN文章:

tkinter-TinUI使用xml的特殊组件

新想法