用最简单的术语来说,如果有额外的空间,非零权重会导致行或列增长。默认权重为零,这意味着如果有额外空间,该列将不会增长。
考虑以下代码,它创建一个比内部小部件更大的窗口,并且没有列具有权重:
import tkinter as tk
root = tk.Tk()
root.geometry("200x100")
f1 = tk.Frame(root, background="bisque", width=10, height=100)
f2 = tk.Frame(root, background="pink", width=10, height=100)
f1.grid(row=0, column=0, sticky="nsew")
f2.grid(row=0, column=1, sticky="nsew")
root.grid_columnconfigure(0, weight=0)
root.grid_columnconfigure(1, weight=0)
root.mainloop()
Note: columnconfigure
是一个别名grid_columnconfigure
。我在这里使用了更长的形式,因为我认为它更清晰。
窗口如下所示:
它看起来像这样的原因是因为 tkinter 被告知不要给任何列任何额外的空间,因此额外的空间在右侧未被使用。
现在,更改代码,以便我们只为一列赋予权重:
root.grid_columnconfigure(0, weight=1)
当我们重新启动时,我们现在有一个如下所示的窗口:
发生了什么?由于第 0 列的权重为 1,因此 tkinter 为该列提供了额外的空间。您可以将权重设置为 1、100、100000,您会得到相同的结果。在这种情况下,所有额外空间都会进入这一列。
如果给两列赋予权重,会发生什么?额外的空间按照其重量按比例分配在各列之间。例如,假设您希望左侧的导航区域占据屏幕的 1/4,而主区域应占据屏幕的 3/4(比例为 1:3)。
让我们将权重更改为如下所示:
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=3)
由于两列都有重量,因此为两列提供了额外的空间。对于每四个像素的额外空间,第 0 列将获得 1 个像素,第 1 列将获得其他 3 个像素。
此外,如果您以交互方式调整窗口大小,则会尽可能保留比例。这是我手动调整大小以使其更宽的同一个窗口: