在tkinter中,当整个窗口变大时,我们有columnconfigure
和rowconfigure
用于拉伸内框。
我搜索了使用这两种方法的适当指南,但我找不到。
我自己尝试了这些东西并学会了如何使用它,但我仍然希望从知道的人那里听到它。也许当我自己学习时,我错过了一个细节或其他东西。
答案 0 :(得分:1)
当tkinter布置一组小部件时,可能会有一些额外的空间。例如,您可能有一个200x200的窗口,并且在其中放置了四个其他小部件,每个小部件为50x50。
import tkinter as tk
root = tk.Tk()
root.geometry("200x200")
f1 = tk.Frame(root, width=50, height=50, background="bisque")
f2 = tk.Frame(root, width=50, height=50, background="pink")
f3 = tk.Frame(root, width=50, height=50, background="orange")
f4 = tk.Frame(root, width=50, height=50, background="brown")
f1.grid(row=0, column=0, sticky="nsew")
f2.grid(row=0, column=1, sticky="nsew")
f3.grid(row=1, column=0, sticky="nsew")
f4.grid(row=1, column=1, sticky="nsew")
root.mainloop()
因为我们还没有配置行和列,所以tkinter不知道如何处理所有额外空间,所以它是空的。
grid
几何管理器使用“权重”和其他选项来决定如何分配未使用的空间。默认情况下,每行和每列的权重为零,因此不会为每个行和列分配任何额外空间。
如果我们希望最右边的列占用所有额外空间怎么办?我们可以给该列一个正的非零权重,grid
将为该小部件分配所有额外的空间。
请注意,如果我们希望为窗口小部件提供额外的空间,我们会在父窗口小部件上配置行或列。我们并没有说“为帧f1提供额外的空间”,我们说“在根窗口中,为列X中的任何内容提供额外的空间”。
root.grid_columnconfigure(1, weight=1)
如果我们想要一些空间向左边走,有些走向右边怎么办?重量代表一定比例。如果我们希望两列的大小相等,我们可以给它们相同的权重。重量是什么并不重要,只要它们是相同的。
root.grid_columnconfigure(0, weight=10)
root.grid_columnconfigure(1, weight=10)
由于这些值是成比例的,我们可以在右边分配两倍的空间,而在左边分配两个权重:1/2比例:
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=2)
我们甚至可以给空行或列赋予权重。通常,空行和列不占用空间,但这是一种用于居中对象的有用技术。例如,我们可以将小部件放在第1列和第2列中,然后告诉grid
为列0和3提供所有额外空间以提供居中效果:
f1.grid(row=0, column=1, sticky="nsew")
f2.grid(row=0, column=2, sticky="nsew")
f3.grid(row=1, column=1, sticky="nsew")
f4.grid(row=1, column=2, sticky="nsew")
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(3, weight=1)
以上所有内容也适用于行。如果我们将小部件移动到第1行和第2行,我们可以通过配置所有空行和列来集中所有内容:
f1.grid(row=1, column=1, sticky="nsew")
f2.grid(row=1, column=2, sticky="nsew")
f3.grid(row=2, column=1, sticky="nsew")
f4.grid(row=2, column=2, sticky="nsew")
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(3, weight=1)
root.grid_rowconfigure(0, weight=1)
root.grid_rowconfigure(3, weight=1)
除weight
之外还有其他配置选项。完整的选项包括:
minsize
- 设置行或列的最小大小。 weight
- 设置分配行或列之间任何多余空格的相对权重pad
- 设置用作填充的空间量(行的顶部和底部,列的左侧和右侧)uniform
- 定义统一组。 uniform
具有相同值的所有行(或列)将具有相同的宽度或高度。 the grid algorithm上tcl/tk man page for grid部分介绍了有关网格工作原理的规范文档。