0

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

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

我希望我很清楚,如果您需要知道其他任何信息,请告诉我。

4

1 回答 1

4

如果标签中显示的是图像或位图,则该值以屏幕为单位;对于文本,它是字符。

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

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()

在此处输入图像描述

于 2021-08-25T18:08:27.257 回答