使用tkinter';如何拉伸窗口;s网格几何体管理器?
在tkinter中,我们有使用tkinter';如何拉伸窗口;s网格几何体管理器?,tkinter,Tkinter,在tkinter中,我们有列configure和行configure,用于在整个窗口变大时拉伸内部框架。 我搜索了使用这两种方法的合适指南,但没有找到 我自己做了实验,学会了如何使用它,但我还是想从一个知道的人那里了解它。也许当我自己学习的时候,我错过了一个细节什么的。当tkinter布置一组小部件时,可能会有一些额外的空间。例如,您可能有一个200x200的窗口,并且在其中放置了四个其他小部件,每个小部件都是50x50 import tkinter as tk root = tk.Tk()
列configure
和行configure
,用于在整个窗口变大时拉伸内部框架。
我搜索了使用这两种方法的合适指南,但没有找到
我自己做了实验,学会了如何使用它,但我还是想从一个知道的人那里了解它。也许当我自己学习的时候,我错过了一个细节什么的。当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
将为该小部件分配所有额外的空间
请注意,如果我们希望为小部件提供额外的空间,我们将在父小部件上配置行或列。我们不是说“给f1帧额外的空间”,而是说“在根窗口中,给X列中的任何内容额外的空间”
如果我们想要一些空间到左边,一些到右边呢?重量代表一个比例。如果我们希望两列的大小相等,我们可以给它们相同的权重。重量是多少并不重要,只要它们是一样的
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)
除了重量之外,还有其他配置选项。整套选项包括:
-设置行或列的最小大小李>minsize
-设置行或列之间分配任何额外空间的相对权重weight
-设置用作填充的空间量(行的顶部和底部,列的左侧和右侧)pad
-定义统一组。对于uniform
具有相同值的所有行(或列)将具有相同的宽度或高度李>uniform
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)