我认为您的问题在于,每次创建LabeledFrame的新实例时,都将Entry&;Label放在同一个Frame中。
此Frame的grid设置与任何其他Frame设置是分开的,因此LabeledFrame无法对齐列,因为它们的列宽值不同。
通常,为了完成之后的工作,只需将sticky = W放在grid选项中,让Entry小部件左对齐单元格的内容。但是,这只适用于每个单独的Frame,使得每个单独的LabeledFrame的内容不一致。
无需更改太多代码即可修复此问题的最简单方法:
您需要在for循环中添加一行。如果指定插入self.field的Frame的列的最大最小宽度,则可以确保事情将按照您希望的方式对齐。我还为LabeledEntry类中的grid调用添加了配置选项:sticky = W用于Label&;sticky = E用于Entry。
试试这个,看看能不能解决你的问题。如果希望列占用更少的空间,只需减少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&