依靠字体对齐是不好的做法;如前所述,它仅适用于等宽字体,但您真的想在整个应用程序中仅使用等宽字体进行对齐吗?我当然不会。如果您想稍后将Label 更改为Input 或其他内容怎么办?我们现在是否必须添加新的Labels 来对齐?
因此,在更改为等宽字体“有效”的同时,使用 Tk 为我们提供的工具是一种(更好的)方法。
例如,您可以将第一列中的Label()设置为固定宽度:
import tkinter
# Just some random strings of different sizes from my dictionary
names = ['Algol', 'American', 'Americanises', 'Americanising', 'Americanism',
'Argentine', 'Argentinian', 'Ariz', 'Arizona', 'Armstrong']
root = tkinter.Tk()
tkinter.Label(root, text='Lists:', anchor=tkinter.W).grid(row=0, column=0, sticky=tkinter.W)
for i in range(0, 10):
label_id = tkinter.Label(root, width=30, anchor=tkinter.W, text='Sector %s' % i)
label_name = tkinter.Label(root, anchor=tkinter.W, text=names[i])
label_id.grid(row=i+1, column=0, sticky=tkinter.W)
label_name.grid(row=i+1, column=1, sticky=tkinter.W)
root.mainloop()
不过,还有更多方法可以做到这一点。例如,通过使用columnconfigure 设置宽度:
import tkinter
# Just some random strings of different sizes from my dictionary
names = ['Algol', 'American', 'Americanises', 'Americanising', 'Americanism',
'Argentine', 'Argentinian', 'Ariz', 'Arizona', 'Armstrong']
root = tkinter.Tk()
root.columnconfigure(0, minsize=150)
tkinter.Label(root, text='Lists:', anchor=tkinter.W).grid(row=0, column=0, sticky=tkinter.W)
for i in range(0, 10):
label_id = tkinter.Label(root, anchor=tkinter.W, text='Sector %s' % i)
label_name = tkinter.Label(root, anchor=tkinter.W, text=names[i])
label_id.grid(row=i+1, column=0, sticky=tkinter.W)
label_name.grid(row=i+1, column=1, sticky=tkinter.W)
root.mainloop()
使用columnconfigure() 的优点是最小宽度与列的内容无关。因此,如果您稍后将 Label() 更改为其他内容,布局应该仍然有效,而且您可能更明显地想要为此列设置宽度。