我正在尝试用python中的Tkinter编写一个简单的ui,我无法在网格中获取小部件来调整大小。每当我调整主窗口的大小时,条目和按钮小部件根本不会调整。
这是我的代码:
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master, padding=(3,3,12,12))
self.grid(sticky=N+W+E+S)
self.createWidgets()
def createWidgets(self):
self.dataFileName = StringVar()
self.fileEntry = Entry(self, textvariable=self.dataFileName)
self.fileEntry.grid(row=0, column=0, columnspan=3, sticky=N+S+E+W)
self.loadFileButton = Button(self, text="Load Data", command=self.loadDataClicked)
self.loadFileButton.grid(row=0, column=3, sticky=N+S+E+W)
self.columnconfigure(0, weight=1)
self.columnconfigure(1, weight=1)
self.columnconfigure(2, weight=1)
app = Application()
app.master.title("Sample Application")
app.mainloop()
答案 0 :(得分:14)
添加根窗口并对其进行配置,以便您的Frame小部件也可以展开。这就是问题所在,如果你没有指定一个隐藏的根窗口,那么框架本身就是没有正确扩展的东西。
root = Tk()
root.columnconfigure(0, weight=1)
app = Application(root)
答案 1 :(得分:0)
我为此使用包装。在大多数情况下,这就足够了。 但是不要混合两者!
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack(fill = X, expand =True)
self.createWidgets()
def createWidgets(self):
self.dataFileName = StringVar()
self.fileEntry = Entry(self, textvariable=self.dataFileName)
self.fileEntry.pack(fill = X, expand = True)
self.loadFileButton = Button(self, text="Load Data", )
self.loadFileButton.pack(fill=X, expand = True)
答案 2 :(得分:0)
一个工作示例。请注意,您必须为使用的每个列和行显式设置配置,但下面按钮的columnspan是一个大于显示列数的数字。
## row and column expand
top=tk.Tk()
top.rowconfigure(0, weight=1)
for col in range(5):
top.columnconfigure(col, weight=1)
tk.Label(top, text=str(col)).grid(row=0, column=col, sticky="nsew")
## only expands the columns from columnconfigure from above
top.rowconfigure(1, weight=1)
tk.Button(top, text="button").grid(row=1, column=0, columnspan=10, sticky="nsew")
top.mainloop()