tkinter绘制组件(4)——Label

tkinter绘制组件(4)——Label

引言

Label组件在tkinter中算是十分基础的了。Label主要用来显示不可更改的文本信息,在程序UI中作为信息指示控件使用。

使用画布画出Label也是十分简单,思路与绘制按钮一样。


代码

由于过于简单,直接在TinUI类下加上这样一个函数:

def add_label(self,pos:tuple,text:str,fg='black',bg='#f0f0f0',outline='grey',font=('微软雅黑',12)):#绘制标签
    '''
    pos::位置
    text::文字
    fg::前景色
    bg::背景色
    outline::边框颜色
    font::字体
    '''
    label=self.create_text(pos,text=text,fill=fg,font=font,anchor='nw')
    bbox=self.bbox(label)
    x1,y1,x2,y2=bbox[0]-3,bbox[1]-3,bbox[2]+3,bbox[3]+3
    back=self.create_rectangle((x1,y1,x2,y2),fill=bg,outline=位置)
    self.tkraise(label)
    return label

由此看来,TinUI绘制Label实际上就是在绘制文字的基础上,加上一个背景颜色、边框而已。

由于实现简单,就不给出效果了(实际上在该系列专栏中的上一篇文章里就已经出现了)。

这只是引子。


排版思想(覆盖类)

这是TinUI最为核心的内容。

以绘制Label为例。

为什么我们不先绘制矩形,使矩形在下方?而且,tkinter的画布还有insert函数,可以插入文字。

因为我们需要追求更加灵活的排版。

关于元素覆盖这一方面,TinUI采取的排版方式步骤如下:

  1. 先绘制无法直接得出占位的元素,如文字、图片等
  2. 获取先绘制元素的占位情况,使用bbox函数
  3. 绘制占位(尺寸)可控的元素
  4. 调整元素层次显示

add_label中体现如下:

#绘制无法确定尺寸的文字
label=self.create_text(pos,text=text,fill=fg,font=font,anchor='nw')
#获取文字尺寸
bbox=self.bbox(label)
#算出背景矩形的合适尺寸
x1,y1,x2,y2=bbox[0]-3,bbox[1]-3,bbox[2]+3,bbox[3]+3
#绘制矩形背景
back=self.create_rectangle((x1,y1,x2,y2),fill=bg,outline=位置)
#调整元素层次
self.tkraise(label)
return label

在TinUI以后的完善中,也会采取类似的排版思想。对于其它的情况,也会根据实际发展出不同的排版思想。


github项目

这里优化了刷新滚动,如果有更好的界面滚动功能,可以在下面的github地址中添加或改进。

TinUI的github项目地址

结语

接下来将完成checkbutton

🔆tkinter创新🔆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值