为什么tkfont.Font().measure返回大值?
我正在开发一个使用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)