4. 布局管理
稍后我们将讨论这些小组件,你的GUI应用程序构建块。组件在一个窗口中如何安排?
虽然 Tkinter有三个不同的“几何管理器”,对于绝大多数组件,笔者强烈地推荐 .grid()几何管理器。该管理器将每一个窗口或框架作为一个表格——一个包含行列的网格。
-
一个单元是在一行和一列的交点区域。
-
每一列的宽度是该列中最宽的单元格的宽度。
-
每一行的高度是该行中最大的单元格的高度。
-
对于没有填满整个单元格的组件,可以指定如何使用额外的空间。你可以将其保留组将以外额外的空间,或拉伸部件以适应它,在水平或垂直方向。
-
您可以将多个单元格组成一个较大的区域,这个过程被称为跨越。
当您创建了一个widget,除非你在布局管理器中注册了它,否则它不会出现。因此,建设和放置一个widget是两个步骤的过程,就像是这样的:
self.thing = tk.Constructor(parent, ...) self.thing.grid(...)
这里的Constructor
是按钮,框架等组件之一,并且父类是一个创建了子控件的父控件。所有的组件都有 .grid()方法,你可以用它来告诉布局管理器把它放在哪里。
4.1 .grid()
方法
显示一个组件 w
在你的应用程序屏幕上:
w.grid(option=value, ...)
这个方法在几何管理器中注册一个组件 w
——如果你不这样做,组件将在内部存在,但它不会在屏幕上可见。对于可选项,可参考 Table 1, “Arguments of the .grid()
geometry manager”.
Table 1. Arguments of the .grid()
geometry manager
column | 您想要网格化组件的列号,从零开始计数。默认值是零。 |
columnspan | 通常一个部件只占用一个单元网格。但是,你可以在一行中占用多个单元格,并且由columnspan 选项将它们合并成一个较大的单元格。例如, 将会把组件 w 放进第一行中占据了第2, 3, 4列 的一个单元格。 |
in_ | 到寄存器中W为一些小部件W2一个孩子,使用IN_= W2。新的父W2必须是建立瓦特时所使用的父控件的后裔。注册组件 w 作为组件 的字组件。用法: in_= 。 新的父控件 必须是继承 parent 组件used when w was created. |
ipadx | 内部 x 填充。这个尺寸被添加在窗口部件的内部,增量在左右两侧。 |
ipady | 内部y 填充。这个尺寸被添加在窗口部件的内部,增量在上下两侧。 |
padx | 外部 x 填充。这个尺寸被添加在窗口部件的外部,增量在左右两侧。 |
pady | 外部 y 填充。这个尺寸被添加在窗口部件的外部,增量在上下两侧。 |
row | 您想要网格化组件的行号,从零开始计数。默认值是下一个未占据的更高编号的行。 |
rowspan | 通常一个部件只占用一个单元网格。然而,你可以占据一列的多个相邻的单元格,通过设置rowspan 选项网格的数量实现。可以与 columnspan 选项组合使用,来占据但单元格。例如, 将会把组件 w 放置在一个行号3–6,列号2-6合并了 20 个单元格的区域。 |
sticky | 该选项决定如何分配单元格在部件为自然大小状态下未占据的额外空间。见下文。 |
-
如果你不提供
sticky
属性,默认行为是将组件在单元格居中放置。 -
您可以把组件放置在单元格的角落,通过使用
sticky=tk.NE
(右上角),tk.SE
(右下角),tk.SW
(左下角), 或tk.NW
(左上角)。 -
您可以把组件放置在相对于单元格某个边的中心位置,通过
sticky=tk.N
(上边中心),tk.E
(右边中心),tk.S
(下边中心), 或tk.W
(左边中心). -
使用
sticky=tk.N+tk.S
垂直伸展窗口部件,水平方向上居中。 -
使用
sticky=tk.E+tk.W
水平伸展窗口部件,垂直方向上居中。 -
使用sticky=tk.N+tk.E+tk.S+tk.W
在水平和垂直方向伸展部件填补单元格。 -
其他的组合也会奏效。例如,
sticky=tk.N+tk.S+tk.W
将垂直伸展窗口部件,并把它放置在西(左)边框。