为什么tkfont.Font().measure返回大值?

2 投票
1 回答
1512 浏览
提问于 2025-04-18 07:26

我正在开发一个使用Python 3.X的应用程序,主要用到tkinter这个库,特别是ttk.Treeview来从数据库中构建一些表格。在测量列的宽度时,发现返回的值通常太大了。

在这里,val是单元格的值,下面的代码用来计算宽度:

col_w = tkfont.Font().measure(str(val).rstrip())

这是实际效果:

实际效果

而我希望看到的是这样的效果:

期望效果

有什么想法吗?

1 个回答

2

首先,确保你从你的 Treeview 中获取的是正确字体的宽度。

下面的代码给了我两个不同的值:

Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 20:20:57) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter as tk
>>> from tkinter import font
>>> root = tk.Tk()
>>> print(font.Font().measure('foo'))
22
>>> print(font.nametofont('TkHeadingFont').measure('foo'))
18

接下来,检查一下你列的 stretch 设置,因为这会影响列的宽度。

另外,你可能想给字符串的长度加一点空白,这样元素之间会有一些呼吸空间。我在字符串后面加了两个空格,并考虑了我在布局中标准的 X 方向的填充:

# Defined elsewhere in my module
PAD_X = 5

def get_padded_text_width(standard_font, text):
   return font.nametofont(standard_font).measure(text + '__') + (2 * PAD_X)

撰写回答