【问题标题】:Adjusting text in tkinter Label to occupy all available space调整 tkinter 标签中的文本以占用所有可用空间
【发布时间】:2021-08-25 16:48:15
【问题描述】:

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

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

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

【问题讨论】:

  • 试试sticky='nsew'
  • 您需要一个由单个字母组成的网格才能获得所需的结果。
  • @jasonharper 是的,这可能是一个可能的解决方案,但 Jason Yang 提出的解决方案要干净得多。
  • @Sujay 没有什么不同。总之谢谢分享。

标签: python python-3.x tkinter tkinter-layout tkinter-text


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,您的方法非常适合我的问题。在你的代码中有一些我在 tkinter 中从未有过的新东西让我克服。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
相关资源
最近更新 更多