Python Tkinter:Frame不会展开以用grid()填充根小部件内的剩余空间

Python Tkinter:Frame不会展开以用grid()填充根小部件内的剩余空间,python,tkinter,Python,Tkinter,我一直在研究类似的线程,我唯一能理解的是建议使用pack()方法的expand选项,我想知道是否可以扩展一个框架,用.grid()方法填充父部件的可用空间 import tkinter as tk root = tk.Tk() root.title('MSIV Preferences') root.geometry('850x450') frame = tk.Frame(root, bg='black') frame.grid(column=0, row=0) root.mainloop()

我一直在研究类似的线程,我唯一能理解的是建议使用
pack()
方法的
expand
选项,我想知道是否可以扩展一个框架,用
.grid()
方法填充父部件的可用空间

import tkinter as tk

root = tk.Tk()
root.title('MSIV Preferences')
root.geometry('850x450')

frame = tk.Frame(root, bg='black')
frame.grid(column=0, row=0)
root.mainloop()

你需要做两件事。首先,您需要告诉grid让您的框架填充分配给它的空间,其次,您需要告诉grid将所有额外空间分配给包含框架的行和列。第二步仅当您希望小部件在调整窗口大小时继续填充空间时才有必要

第一个是使用记录在案的
sticky
参数完成的,该参数告诉小部件“粘贴”到分配给它的空间的一个或多个侧面。它需要一串指南针的方位。例如,“nsew”代表“北-东南-西”。这样,框架将粘在分配给它的空间的所有四个边上

frame.grid(column=0, row=0, sticky="nsew")
第二步是告诉
grid
为包含帧的行和列分配任何额外空间。您可以通过为一个或多个行和列分配
权重来实现这一点<代码>网格
将分配相对于
权重的额外空间
。例如,如果一列的权重为2,一列的权重为1,另一列的权重为0(默认值),则对于每三个额外空间像素,两个将进入一列,一个将进入另一列

根据经验,使用
grid
时,应始终为至少一行和一列指定正权重

在您的情况下,它将是这样的:

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
以下是完整的程序:

import tkinter as tk

root = tk.Tk()
root.title('MSIV Preferences')
root.geometry('850x450')

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

frame = tk.Frame(root, bg='black')
frame.grid(column=0, row=0, sticky="nsew")

root.mainloop()

你试过什么
grid
有许多文档化的参数,所有相关的grid命令都有文档化。不清楚您为什么需要我们的帮助。@BryanOakley我可以在我的框架小部件中预先设置宽度和高度,但我想知道我是否可以将框架小部件设置为扩展并占用父widgetRead中的可用空间。不,您不能使用
grid()
@martineau:这不是真的。谢谢您的详细回答,尽管我仍然不明白为什么我至少应该给行和列一个正权重?是为了在窗口调整大小时填充额外的空间吗?@MehdiRezzagHebla:是的,是为了在窗口调整大小时填充额外的空间。