【问题标题】:Why justify and anchor do not work for Label of Python Tkinter为什么 justify 和 anchor 不适用于 Python Tkinter 的标签
【发布时间】:2018-08-05 14:56:02
【问题描述】:

我正在使用以下代码并尝试将标签上的文本居中:

from tkinter import * 
root = Tk()
llist = ["first:","second label:","a really long label:","fourth:","fifth:"]
nrow = 0
for i in range(len(llist)):
    # Label(root, text=llist[i], justify='right').grid(row=nrow, column=0) # does not work
    # Label(root, text=llist[i], justify=RIGHT).grid(row=nrow, column=0) # does not work
    # Label(root, text=llist[i], anchor=E).grid(row=nrow, column=0) # does not work
    # Label(root, text=llist[i], anchor=E, justify=RIGHT).grid(row=nrow, column=0) # does not work
    Label(root, text=llist[i]).grid(row=nrow, column=0, sticky=E) # WORKS; 
    Entry(root).grid(row=nrow, column=1)
    nrow += 1
root.mainloop()

文本保留在center 中,我提到的选项在上面的代码中不起作用:

只有grid() 中的sticky 选项才能正常工作:

为什么Labeljustifyanchor 选项在上面的代码中不起作用,即使它们在多个地方被提及,例如http://effbot.org/tkinterbook/label.htm ?如何使用justifyanchor 对齐Labels 中的文本?

【问题讨论】:

  • 问题可能是当小部件适合时,它的文本的对齐可以被认为是anything,因为没有空间可以对齐。默认情况下,小部件是合适的。
  • justify 和 anchor 是如何使用的?
  • 第二张图片的工作方式是首先裁剪标签所需的空间,然后将其放在第一列的东边。使用 justify,您应该使用 Label 小部件完全占据第一列,并且只需在 label 小部件内使用 justify 选项移动其文本。也许添加bg='red' 选项以更好地查看标签占用的空间。
  • background="pink" 添加到您的标签中。您将能够更好地想象正在发生的事情。

标签: python python-3.x user-interface tkinter label


【解决方案1】:

这是因为你没有为Label设置width,如果你不设置,Label将适合它的内容。所以简而言之,Label 中的文本与anchor 选项一起使用,但Label 的长度与文本的长度相同。而位于center 的不是text 而是Label

如果您手动为其设置宽度:

Label(root, text=llist[i], anchor="e", width=20).grid(row=nrow, column=0)

可以,但是手动指定Label的长度比较困难,所以使用gridsticky选项会好很多。

【讨论】:

  • “很难手动指定Label的长度”是什么意思?为什么这么难?
  • @BryanOakley 因为在大多数复杂的情况下,您无法轻易确定宽度。在这种简单的情况下,您当然可以将宽度设置为max([len(text) for text in llist])
猜你喜欢
  • 2020-09-25
  • 2015-08-09
  • 1970-01-01
  • 2020-05-25
  • 2021-02-19
  • 2021-07-30
  • 2021-01-08
  • 1970-01-01
  • 2020-05-07
相关资源
最近更新 更多