不久前,我开始用python开发一些GUI,最后我决定知道足够多的知识,可以使用网格几何管理器编写完整的GUI。
我很惊讶地发现,当我尝试使用sticky="nsew"
参数将网格的框架扩展到窗口边缘时,它没有用,并且网格中的所有元素都保留在网格的左上角。屏幕上。
您可以在下面查看我的代码和一些屏幕截图。
为解决此问题,我尝试了各种解决方案,包括删除了sticky
参数(第7行),但是,这弄乱了背景色,并且框架没有延伸到窗口边缘。
如何解决此问题并使框架延伸到窗口边框?提前致谢! (;
使用GridPage
类-不居中!
使用PackPage
类和.pack()
函数-像我需要的那样居中
这是第二个示例的代码:
import tkinter as tk
class DefaultPage(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
self.grid(row=0, column=0, sticky="nsew")
class GridPage(DefaultPage):
def __init__(self, *args, **kwargs):
DefaultPage.__init__(self, *args, **kwargs)
tk.Button(self, text='hello!').grid()
tk.Label(self, text="I'm placed USING GRID").grid()
class PackPage(DefaultPage):
def __init__(self, *args, **kwargs):
DefaultPage.__init__(self, *args, **kwargs)
tk.Button(self, text='hi there!').pack()
tk.Label(self, text="I'm placed USING PACK").pack()
root = tk.Tk()
baseframe = tk.Frame(root)
baseframe.pack(side="top", fill="both", expand=True)
baseframe.grid_rowconfigure(0, weight=1)
baseframe.grid_columnconfigure(0, weight=1)
# frame = PackPage(baseframe, bg='yellow') # second screenshot. works as intended
frame = GridPage(baseframe, bg='yellow') # not centerd in the middle of the window.
root.mainloop()
答案 0 :(得分:2)
您需要配置行和列的权重。 默认情况下,权重= 0,这意味着框架内的小部件将始终缩小到最小尺寸。因此,您需要进行配置。
这可以通过以下功能实现
grid_rowconfigure()
和grid_rowconfigure()
您似乎需要做的是使列的权重= 1随容器扩展,同时保持第一行的权重= 0以使标签和按钮始终贴紧。
您的代码将是这样
class DefaultPage(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
self.grid(row=0, column=0, sticky="nsew")
self.grid_rowconfigure(0, weight=0)
self.grid_columnconfigure(0, weight=1)
class GridPage(DefaultPage):
def __init__(self, *args, **kwargs):
DefaultPage.__init__(self, *args, **kwargs)
tk.Button(self, text='hello!').grid(sticky="n")
tk.Label(self, text="I'm placed USING GRID").grid(sticky="n")