Tkinter:无法使用 "width" 对齐标签和文本小部件
Tkinter : can not align Label and Text widgets using "width"
我正在尝试使用 Tkinter 创建一个简单的 table。但是标签和文本小部件没有水平对齐。例如,这是我的 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() 函数 returns 在 Line_Number_label 上的长度为 30 像素,在 Text0 上的长度为 25 像素。我给所有小部件相同的警察和相同的大小:
root.option_add("*Font", "Roboto 10")
出于某种原因,标签小部件的宽度总是比文本小部件稍长:
标签小部件似乎不像文本小部件那样根据字符数设置其尺寸(“宽度”)。还是我做错了什么?
以下代码确保您的列对齐。这只是一个包含 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
时遇到过一些问题。这样的包装对我来说更稳重
我正在尝试使用 Tkinter 创建一个简单的 table。但是标签和文本小部件没有水平对齐。例如,这是我的 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() 函数 returns 在 Line_Number_label 上的长度为 30 像素,在 Text0 上的长度为 25 像素。我给所有小部件相同的警察和相同的大小:
root.option_add("*Font", "Roboto 10")
出于某种原因,标签小部件的宽度总是比文本小部件稍长:
标签小部件似乎不像文本小部件那样根据字符数设置其尺寸(“宽度”)。还是我做错了什么?
以下代码确保您的列对齐。这只是一个包含 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
时遇到过一些问题。这样的包装对我来说更稳重