如何从高度约束推导字体大小?
我需要把一个 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()
希望我理解了你想要实现的目标,并且这些信息对你有帮助。