Tkinter:框架不会扩展以用grid()填充根小部件内的剩余空间

时间:2020-10-26 22:29:48

标签: python tkinter

我一直在研究类似的线程,我唯一能理解的建议是使用expand方法的pack()选项,我想知道是否可以扩展框架以填充父控件的可用空间是否可用.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()

1 个答案:

答案 0 :(得分:1)

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

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

frame.grid(column=0, row=0, sticky="nsew")

第二步是告诉grid将其拥有的所有多余空间分配给包含框架的行和列。为此,您可以将weight分配给一个或多个行和列。 grid将分配相对于weight的额外空间。例如,如果一列权重为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()