引言
顾名思义,这是一个可折叠的UI控件。
UI控件自然就是TinUI了,或者是不可滚动的BasicTinUI。
可折叠,就是说这个控件可以以一个标题框布局在某一个位置,使用者可以展开,查看其中的界面信息。
这种控件tkinter原生想都不敢想,虽然可以做到。
布局
函数结构
def 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
'''
pos-位置
title-标题
tfg-标题颜色
tbg-标题框颜色
bg-UI颜色
sep-边框、分割线颜色
widtH-ui宽度,标题宽度为 width-300
height-UI高度
scrollbar-是否启用TinUI
font-字体
'''
标题元素
这里的标题栏和TinUI的notify
类似,借鉴一下:
toptext=self.create_text((pos[0]+10,pos[1]+10),text=title,font=font,fill=tfg,width=width-30,anchor='nw')#标题
uid='expander'+str(toptext)
contentid='expander-content'+str(toptext)
self.addtag_withtag(uid,toptext)
self.addtag_withtag(contentid,toptext)
tx1,ty1,tx2,ty2=self.bBox(toptext)
if tx2-tx1<width:#判读当前文本宽度
tx2=tx1+width
topback=self.create_polygon((tx1,ty1,tx2,ty1,tx2,ty2,tx1,ty2),outline=tbg,fill=tbg,width=10,tags=(uid,contentid))#标题背景
需要注意的是,我们需要为折叠按钮提供一定的位置,因此文本宽度是width-30
。
当然这样的对于不同字号确实不妥,但是……坐等issue……
折叠按钮
button=self.add_button2((tx2-2,ty1-0.5),anchor='ne',text='