我一直在研究类似的线程,我唯一能理解的建议是使用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()
答案 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()