Tkinter中字体大小与部件大小的关系

我是小鱼,今天是2022年2月10日。

之前用python在做扫雷游戏时,发现总是拿不准部件大小与字体之间的关系,为此,当时还特地写了一篇BLOG《Tkinter中的标签(Lable)与按钮(Button)的大小问题》,扫雷写完后我有时间慢慢回头再来看这个问题,发现当时的理解有很多是错误的。于是那篇文章我删除了,我准备重新再整理一下。

无论是标签还是按钮,在Tk中都被称为部件。以标签为例,在Tkinter.Lable的类中有width和height这两个属性。文档说明是说这两个值是用来设置标签的宽度与高度的,单位为像素。如果标签中放置的是图片的话,的确是这个样子,但如果标签中是文本的话,这两个值就与文本本身有关了。是文本的基本像素的倍数。文本的基本像素是与字体有关的,与部件应当无关。而字体的大小,粗细,倾斜都会影响字体的基本像素的大小。这才是导致我当时总是拿不准标签与按钮的大小的主要原因。

这里要在引入Tkinter中对字体的封装的类,Tkinter.Font——参见说明文档

tkinter.font --- Tkinter 字体封装

TK将字体封装在类当中,为了方便我们的使用。因此与字体有关的参数都可以从这个类的两个主要方法中获取出来,一个是measure, 另一个是metrics

measure方法是:返回以当前字体格式化时文本将在指定显示上占用的空间量

用法是  ziti.measure('8') 前面的字体是从封装的字体库中实例化的类,后面的8可以是任意内容,即为你想知道的这些内容在显示器上需要占多少个像素的宽度(见下面图片)

metrics有4个属性值,说明文档中有说明,这里我解释一下前面3个 'ascent', 'descent', 'linespace'

说明文档中:ascent -- 基线和最高点之间的距离; descent -- 基线和最低点之间的距离; linespace -- 所需最小垂直间距(在两个该字体的字符间,使得这两个字符在垂直方向上不重叠)

其实linespace = ascent + descent, 那么基线是什么,见下面的图片

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值