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

use*_*044 6 python tkinter python-2.7

我对 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()
Run Code Online (Sandbox Code Playgroud)

mac*_*rtm 5

我认为您的问题在于每次创建 的新实例时LabeledFrame,您都将Entry&Label放在同一个Frame.

grid设置Frame与任何其他设置分开Frame,因此LabeledFrames不可能对齐列,因为它们的列宽值不同。

通常要完成您的任务,您只需输入小部件sticky = Wgrid选项Entry即可左对齐单元格的内容。但是,这仅适用于每个人Frame,使每个单独的内容LabeledFrame不对齐。

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

您需要在for循环中添加一行。如果指定的列是一个很大的最小宽度self.fieldFrame插入,你可以肯定,事情会对准你如何希望他们。我还gridLabeledEntry类中的调用添加了配置选项:sticky = W用于Label&sticky = E用于Entry.

试试这个,看看它是否能解决你的问题。如果您希望列占用更少的空间,只需 reduce 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()
Run Code Online (Sandbox Code Playgroud)


Ale*_*ner 5

我使用 justify 和 anchor 都取得了成功:

Label(self, text=text, justify=LEFT, anchor="w").grid(sticky = W, column=0,row=0)
Run Code Online (Sandbox Code Playgroud)