Python 如何在Tkinter网格中左对齐标签和输入框

Python 如何在Tkinter网格中左对齐标签和输入框,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,我对Tkinter和类还是相当陌生,但我正在尝试在Tkinter网格的各自列中左对齐标签和输入框。我使用的是Justify=LEFT,但它似乎没有任何影响,因为标签看起来居中,输入框从标签结束的地方开始 from Tkinter import * class LabeledEntry(Frame): def __init__(self, parent, *args, **kargs): text = kargs.pop("text") Frame.__i

我对Tkinter和类还是相当陌生,但我正在尝试在Tkinter网格的各自列中左对齐标签和输入框。我使用的是
Justify=LEFT
,但它似乎没有任何影响,因为标签看起来居中,输入框从标签结束的地方开始

from Tkinter import *

class LabeledEntry(Frame):
    def __init__(self, parent, *args, **kargs):
        text = kargs.pop("text")
        Frame.__init__(self, parent)
        Label(self, text=text, justify=LEFT).grid(column=0,row=0)
        Entry(self, justify=LEFT, *args, **kargs).grid(column=1, row=0)

class User_Input:
    def __init__(self, parent):
        fields = ['Text Label 1', 'This is the text Label 2']
        GUIFrame =Frame(parent)
        GUIFrame.pack(expand=True, anchor=NW)
        parent.minsize(width=350, height=325)
        field_index = 1
        for field in fields:
            self.field = LabeledEntry(GUIFrame, text=field)
            self.field.grid(column=0, row=field_index)
            field_index += 1
        self.Button2 = Button(parent, text='exit', command= parent.quit)
        self.Button2.place(x=25, y=300)

root = Tk()

MainFrame =User_Input(root)
root.mainloop()

我认为您的问题在于,每次创建一个新的
LabeledFrame
实例时,您都将
条目
&
标签
放在同一个
框架

框架
网格
设置与任何其他
框架
是分开的,因此
标签框架
不可能对齐列,因为它们的列宽值不同

通常情况下,要完成任务,只需将
sticky=W
放在
网格中
条目的选项中,以左对齐单元格的内容即可。但是,这只适用于每个单独的
框架
,使每个单独的
标签框架
的内容不对齐

无需更改大量代码即可解决此问题的最简单方法:

您需要在
for
循环中添加一行。如果指定插入
self.field
Frame
的列的最大最小宽度,则可以确保这些内容将按照您希望的方式对齐。我还为
标签
类中的
网格
调用添加了配置选项:
sticky=W
用于
标签
sticky=E
用于
条目

试试这个,看看它是否能解决你的问题。如果希望列占用更少的空间,只需减小
minsize

from Tkinter import *

class LabeledEntry(Frame):
    def __init__(self, parent, *args, **kargs):
        text = kargs.pop("text")
        Frame.__init__(self, parent)
        Label(self, text=text, justify=LEFT).grid(sticky = W, column=0,row=0)
        Entry(self, *args, **kargs).grid(sticky = E, column=1, row=0)

class User_Input:
    def __init__(self, parent):
        fields = ['Text Label 1', 'This is the text Label 2']
        GUIFrame =Frame(parent)
        GUIFrame.pack(expand=True, anchor=NW)
        parent.minsize(width=350, height=325)
        field_index = 1
        for field in fields:
            self.field = LabeledEntry(GUIFrame, text=field)
            self.field.grid(column=0, row=field_index)
            self.field.grid_columnconfigure(index = 0, minsize = 150)
            field_index += 1
        self.Button2 = Button(parent, text='exit', command= parent.quit)
        self.Button2.place(x=25, y=300)

root = Tk()

MainFrame =User_Input(root)
root.mainloop()

我成功地使用了justify和anchor:

Label(self, text=text, justify=LEFT, anchor="w").grid(sticky = W, column=0,row=0)