Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用tkinter';如何拉伸窗口;s网格几何体管理器?_Tkinter - Fatal编程技术网

使用tkinter';如何拉伸窗口;s网格几何体管理器?

使用tkinter';如何拉伸窗口;s网格几何体管理器?,tkinter,Tkinter,在tkinter中,我们有列configure和行configure,用于在整个窗口变大时拉伸内部框架。 我搜索了使用这两种方法的合适指南,但没有找到 我自己做了实验,学会了如何使用它,但我还是想从一个知道的人那里了解它。也许当我自己学习的时候,我错过了一个细节什么的。当tkinter布置一组小部件时,可能会有一些额外的空间。例如,您可能有一个200x200的窗口,并且在其中放置了四个其他小部件,每个小部件都是50x50 import tkinter as tk root = tk.Tk()

在tkinter中,我们有
列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)