调整 tkinter 标签中的文本以占据所有可用的 space

Adjusting text in tkinter Label to occupy all available space

嗨,我希望你们一切都好。我正在 python tkinter 中构建一个眼图软件,它由 Opto Charts 组成。 在 Opto Charts 中,所有字母都直接位于彼此下方。但是当我尝试在 tkinter 中添加标签时,它会形成 V 形,因为每一行的字体大小都在减小。 我要占用所有可用的标签space.

我设法使用 mainFrame.rowconfigure(0, weight=1) 做到了这一点,但它只会使标签全宽而不是其中的文本。我附上了它的外观截图。 在屏幕截图中,您可以看到标签设置为全屏长度,但文本呈 V 形,因为字体大小从上到下逐渐减小。 有没有办法将文本也固定到全宽。换句话说,每个字母都应该直接在上面的字母下面。

我希望我说的很清楚,如果您需要了解任何其他信息,请告诉我。

If an image or bitmap is being displayed in the label then the value is in screen units; for text it is in characters.

要为不同大小的字体占用相同space,请尝试使用图像模式并使用空图像。

import tkinter as tk
from tkinter.font import Font

texts = ('EDFHT', 'FPYUI', 'TOZQW', 'LPEDA', 'PECFD')
sizes = (28, 24, 20, 16, 12)

root = tk.Tk()

factor = 2
tkfont = Font(font=("Courier New", max(sizes), 'bold'))
width, height = tkfont.measure("W")*factor, tkfont.metrics("linespace")*factor
image = tk.PhotoImage(data='')

for row, (text, size) in enumerate(zip(texts, sizes)):
    for column, t in enumerate(text):
        label = tk.Label(root, text=t, font=("Courier New", size, 'bold'), image=image, width=width, height=height, compound=tk.CENTER)
        label.grid(row=row, column=column)

root.mainloop()