如何从高度约束推导字体大小?

0 投票
1 回答
795 浏览
提问于 2025-04-18 07:10

我需要把一个 Label 的高度固定到一个特定的像素值(这个值是根据屏幕的尺寸计算出来的)。为此,我想要找出一个合适的字体大小,这样我的文字就能刚好放进这个高度的区域里。

我可以使用 .metrics() 方法来找到一种字体的平均高度(我想这应该是字符 0 的高度),但我觉得这对确定一串任意文字的高度没有太大帮助。

我可以用什么 Tkinter 的功能来实现这个目标呢?

1 个回答

0

使用 tkFont.Font,你可以通过把字体大小设置为负数来指定字体的像素大小:

tkFont.Font(..., size=-20)

如果你每个标签的高度是根据屏幕尺寸(以像素为单位)变化的,你可以直接把字体设置为这个变量:

tkFont.Font(..., size=-height)

不过这并不是一个完美的解决办法,因为除非你的字体是完全方形的,否则每个字符的像素高度通常会大于像素宽度。也许固定宽度的字体有一个比例(比如,如果字体的像素大小是6,高度就是6*2),你可以利用这个,但我觉得你不能直接设置字体的高度。

另一种选择是直接把标签的大小设置为像素大小,使用一些小技巧,比如给它一个空白的图片,这样它就会把像素大小当作宽度和高度的值来处理:

root = Tk()

# derived width and height
width = 400
height = 40

# blank photo image
image = PhotoImage()

Label(root, image=image, compound='center', text='Hello World',
      width=width, height=height, bg='white').pack()

mainloop()

或者,两者结合使用:

root = Tk()

# derived width and height
width = 400
height = 40

# add a font
font = tkFont.Font(size=-height)

# blank photo image
image = PhotoImage()

Label(root, image=image, compound='center', text='Hello World',
      width=width, height=height, bg='white', font=font).pack()

mainloop()

希望我理解了你想要实现的目标,并且这些信息对你有帮助。

撰写回答