Tkinter-布局管理器
Tkinter布局管理器(三种方法详解)
布局管理指的是通过管理控件在窗口中的位置(排版),从而实现对窗口和控件布局的目的。Tkinter 提供了一系列布局管理的方法和容器控件。
Tkinter 提供了三种常用的布局管理器,分别是 pack()、grid() 以及 place(),如下:
方法说明
pack()按照控件的添加顺序其进行排列,遗憾的是此方法灵活性较差
grid()以行和列(网格)形式对控件进行排列,此种方法使用起来较为灵活
place()可以指定组件大小以及摆放位置,三个方法中最为灵活的布局方法
pack()
pack() 是一种较为简单的布局方法,在不使用任何参数的情况下,它会将控件以添加时的先后顺序,自上而下,一行一行的进行排列,并且默认居中显示。
pack() 方法的常用参数:
anchor
组件在窗口中的对齐方式,有 9 个方位参数值,比如”n”/“w”/“s”/“e”/“ne”,以及 “center” 等(这里的 e w s n分别代表,东西南北)
expand
是否可扩展窗口,参数值为 True(扩展)或者 False(不扩展),默认为 False,若设置为 True,则控件的位置始终位于窗口的中央位置
fill
参数值为 X/Y/BOTH/NONE,表示允许控件在水平/垂直/同时在两个方向上进行拉伸,比如当 fill = X 时,控件会占满水平方向上的所有剩余的空间。
ipadx,ipady
需要与 fill 参数值共同使用,表示组件与内容和组件边框的距离(内边距),比如文本内容和组件边框的距离,单位为像素(p),或者厘米(c)、英寸(i)padx,pady用于控制组件之间的上下、左右的距离(外边距),单位为像素(p),或者厘米(c)、英寸(i)
side
组件放置在窗口的哪个位置上,参数值 ‘top’,’bottom’,’left’,’right’。
注意,单词小写时需要使用字符串格式,若为大写单词则不必使用字符串格式
1 | from tkinter import * |
grid()
grid() 函数是一种基于网格式的布局管理方法,相当于把窗口看成了一张由行和列组成的表格。当使用该 grid 函数进行布局的时,表格内的每个单元格都可以放置一个控件。,从而实现对界面的布局管理。
注意:这里的所说的“表格”是虚拟出来,目的是便于大家理解,其实窗体并不会因为使用了 gird() 函数,而增加一个表格。
grid() 函数的常用参数:
column
控件位于表格中的第几列,窗体最左边的为起始列,默认为第 0 列
columnsapn
控件实例所跨的列数,默认为 1 列,通过该参数可以合并一行中多个领近单元格。
ipadx,ipady
用于控制内边距,在单元格内部,左右、上下方向上填充指定大小的空间。
padx,pady
用于控制外边距,在单元格外部,左右、上下方向上填充指定大小的空间。
row
控件位于表格中的第几行,窗体最上面为起始行,默认为第 0 行
rowspan
控件实例所跨的行数,默认为 1 行,通过该参数可以合并一列中多个领近单元格。
sticky
该属性用来设置控件位于单元格那个方位上,参数值和 anchor 相同,若不设置该参数则控件在单元格内居中
grid() 方法相比 pack() 方法来说要更加灵活,以网格的方式对组件进行布局管理,让整个布局显得非常简洁、优雅。如果说非要从三个布局管理器中选择一个使用的话,那么我推荐大家使用 grid() 方法。
这里有一点需要大家要特别注意,在一个程序中不能同时使用 pack() 和 grid() 方法,这两个方法只能二选一,否则程序会运行错误。
1 | from tkinter import * |
当使用 grid 函数布局的时,其实就是为各个控件指定行号、列号的过程,我们不需要为每个单元格指定大小,因为 grid 会为每个单元格自动设置一个适合的尺寸。
通过 grid() 布局管理器制作一个简易的登录界面
1 |
|
place()
与前两种布局方法相比,采用 place() 方法进行布局管理要更加精细化,通过 place() 布局管理器可以直接指定控件在窗体内的绝对位置,或者相对于其他控件定位的相对位置。
使用 place,设置第一个标签位于距离窗体左上角的位置和其大小(width,height)注意这里(x,y)位置坐标指的是标签左上角的位置(以NW左上角进行绝对定位,默认为NW)
anchor
定义控件在窗体内的方位,参数值N/NE/E/SE/S/SW/W/NW 或 CENTER,默认值是 NW
bordermode
定义控件的坐标是否要考虑边界的宽度,参数值为 OUTSIDE(排除边界) 或 INSIDE(包含边界),默认值 INSIDE。
x、y
定义控件在根窗体中水平和垂直方向上的起始绝对位置
relx、rely
- 定义控件相对于根窗口(或其他控件)在水平和垂直方向上的相对位置(即位移比例),取值范围再 0.0~1.0 之间
- 可设置 in_ 参数项,相对于某个其他控件的位置
height、width
控件自身的高度和宽度(单位为像素)
relheight、relwidth
控件高度和宽度相对于根窗体高度和宽度的比例,取值也在 0.0~1.0 之间
relx和rely参数指定的是控件相对于父组件的位置,而relwidth和relheight参数则是指定控件相对于父组件的尺寸大小。注意:这里父组件指的是当前可操作控件的上层组件,比如在没有使用容器控件(frame)的窗体中,控件的父组件就是主窗口本身
1 |
|
注意:在一个父组件中 place()方法可以与 grid() 方法混合使用,要与 pack() 进行区别。
一般博主推荐 简单的布局的画就使用pack 和 grid 就好了,相对较复杂的布局时就是用place
还有就是需要注意有时候使用grid布局 可能没有效果,这个需要自己分析一下,博主之际也遇到过这种情况