【问题标题】:Tkinter : can not align Label and Text widgets using "width"Tkinter:无法使用“宽度”对齐标签和文本小部件
【发布时间】:2020-11-15 03:17:50
【问题描述】:

我正在尝试使用 Tkinter 创建一个简单的表。但是,标签和文本小部件不会水平对齐。这是例如我的 Line_number 标签:

    Line_Number_label = Label(Frame_Label_Menu, text="N°", anchor="w", bg="#ffffff", width=3)
    Line_Number_label.grid(column=0, row=0, sticky=E+W)

这是我的文本标签,它获取用户在输入字段中输入的值:

    Text0 = Text(Frame_Text, height=1, width=3)
    Text0.grid(column=0, row=Line_number, sticky=E+W)
    Text0.insert("end", Line_number)

winfo.width() 函数在 Line_Number_label 上返回 30 像素的长度,在 Text0 上返回 25 像素的长度。我为所有小部件设置了相同的警察和相同的大小:

    root.option_add("*Font", "Roboto 10")

由于某种原因,标签小部件的宽度总是略长于文本小部件:

标签小部件似乎不像文本小部件那样根据字符数设置它们的尺寸(“宽度”)。还是我做错了什么?

【问题讨论】:

  • 实现目标的最简单方法是使用pack 并使每个小部件fill="x"
  • edit 您的问题包含一个minimal reproducible example,说明您遇到的问题。此外,标签小部件确实将它们的尺寸设置为字符数,除非它们有图像。
  • 感谢大家的cmets。我对现有的编程世界和stackoverflow都很陌生。这是我第二次提出问题,我真的很喜欢您的建设性回答!我将研究这个最小的可重现示例。
  • 尝试使用固定宽度的字体,例如ConsolasCourier,并为标签设置padx=0

标签: tkinter text widget label width


【解决方案1】:

以下代码可确保您的列对齐。这只是一个有 2 列的示例,但它可以扩展到更多列:

# Import requrired libraries/packages
from tkinter import Tk, Frame, X, Y, TOP, Label, Text, LEFT

# Create intance of tkinter
root = Tk(className = 'Python Examples - Window 0')
root.geometry("600x700")
root.resizable(0,0)

# Frame for whole table
frame_table=Frame(root, highlightthickness=0)
frame_table.pack(side=TOP,fill=X)

# Line number
Line_number=1

# 1st column
frame_col1 = Frame(frame_table, highlightthickness=0, width=3)
Line_Number_label = Label(frame_col1, text="N°", anchor="w", bg="#ffffff", width=3)
Text0 = Text(frame_col1, height=1, width=3)
Line_Number_label.pack(fill=X)
Text0.pack(fill=X)

# 2nd column
frame_col2 = Frame(frame_table, highlightthickness=0, width=20)
Line_Date_label = Label(frame_col2, text="Eingangsdatum", anchor="w", bg="#ffffff")
Text1 = Text(frame_col2, height=1)
Line_Date_label.pack(fill=X)
Text1.pack(fill=X)

# Packing of columns
frame_col1.pack(side=LEFT, fill=Y)
frame_col2.pack(side=LEFT, fill=Y)

root.mainloop()

我使用过pack,因为过去我在使用grid 时遇到过一些问题。这样的包装对我来说更稳定。

【讨论】:

  • 非常感谢!明天我会尝试使用你的代码。
  • 有效!使用 .pack,我的表中的列现在完全对齐。谢谢大卫!
  • 不客气。请通过接受答案来结束问题。问候。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多