拉伸窗口如何使用tkinter的网格几何管理器?

时间:2018-03-30 09:47:55

标签: tkinter

在tkinter中,当整个窗口变大时,我们有columnconfigurerowconfigure用于拉伸内框。 我搜索了使用这两种方法的适当指南,但我找不到。

我自己尝试了这些东西并学会了如何使用它,但我仍然希望从知道的人那里听到它。也许当我自己学习时,我错过了一个细节或其他东西。

1 个答案:

答案 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()

enter image description here

因为我们还没有配置行和列,所以tkinter不知道如何处理所有额外空间,所以它是空的。

grid几何管理器使用“权重”和其他选项来决定如何分配未使用的空间。默认情况下,每行和每列的权重为零,因此不会为每个行和列分配任何额外空间。

如果我们希望最右边的列占用所有额外空间怎么办?我们可以给该列一个正的非零权重,grid将为该小部件分配所有额外的空间。

请注意,如果我们希望为窗口小部件提供额外的空间,我们会在窗口小部件上配置行或列。我们并没有说“为帧f1提供额外的空间”,我们说“在根窗口中,为列X中的任何内容提供额外的空间”。

root.grid_columnconfigure(1, weight=1)

enter image description here

如果我们想要一些空间向左边走,有些走向右边怎么办?重量代表一定比例。如果我们希望两列的大小相等,我们可以给它们相同的权重。重量是什么并不重要,只要它们是相同的。

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

enter image description here

由于这些值是成比例的,我们可以在右边分配两倍的空间,而在左边分配两个权重: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)

enter image description here

以上所有内容也适用于行。如果我们将小部件移动到第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)

enter image description here

weight之外还有其他配置选项。完整的选项包括:

  • minsize - 设置行或列的最小大小。
  • weight - 设置分配行或列之间任何多余空格的相对权重
  • pad - 设置用作填充的空间量(行的顶部和底部,列的左侧和右侧)
  • uniform - 定义统一组。 uniform具有相同值的所有行(或列)将具有相同的宽度或高度。

the grid algorithmtcl/tk man page for grid部分介绍了有关网格工作原理的规范文档。

相关问题