11.1.3 tkinter组件布局
tkinter支持3种几何布局管理器,分别是pack、grid、place。它们主要决定组件的排列位置。不管哪一种几何布局管理器,在同一个父窗口中,都不可以混合使用。
1.pack(parameter)几何布局管理器
pack()可以使组件定位到窗体或其他组件指定的位置,parameter为pack()的可选参数,常用可选项有如下几个。
①side:决定组件的排列方式,默认值为side="top",表示在顶端放置组件。还可以显式设置为buttom(在下端)、left(在左端)、right(在右端)。pack()省略参数时表示side="top"。
②padx、pady:可以指定组件之间x、y方向上间隔的大小,默认单位为像素,也可设置成单位c(厘米)、m(毫米)、i(英寸,1英寸=2.54 cm)、p(打印机的点,即1/27英寸),如pack(padx=20,pady="3m")。
③anchor:组件之间的对齐方式,值可设置为w(左对齐/靠西方向)、e(右对齐/靠东方向)、n(顶对齐/靠北方向)、s(底对齐/靠南方向)、nw(左上对齐/靠西北方向)、sw(左下对齐/靠西南方向)、se(右下对齐/靠东南方向)、ne(右上对齐/靠东北方向)、center(中间对齐)。默认是center。
2.grid()几何布局管理器
grid()几何布局管理器是指将组件放置在一个二维的表格里,主组件被分割成一系列的行与列,表格中的单元格都可以放置组件。grid()的参数如表11-3所示。
表11-3 grid()的参数
在组件外部,左右方向各填充指定长度的空间。
如果没有声明sticky属性,默认将插件居中于单元中。
通过设置sticky=tk.E(靠右上方),sticky=tk.SE(靠右下方),sticky=-th.SW(靠左下方),sticky=tk.NW(靠左上方),可以将插件布置在单元的某个角落。
通过设置sticky=tk.W(靠上方),sticky=tk.E(靠右方),sticky=tk.S(靠下方),sticky=th.W(靠左方),可以将插件布置在单元的某个方向上。
通过设置sticky=tk.N+tl.S,在垂直方向上延伸插件,并保持水平居中。
通过设置sticky=tk.E+tk.W,在水平方向上延伸插件,并保持垂直居中。
通过设置sticky=tk.N+th.E+tk.W,在水平和垂直方向上延伸插件,填满单元。
也可以使用其他的组合。比如,sticky=tk.N+tk.S+tk.W,在垂直方向上延伸插件,并靠左布放。
通过一个表格来理解grid()布局,具体布置如图11-4所示。
图11-4 布局格式效果
用grid()几何布局管理器将整个窗体分成四行三列,包含7个组件。
·label1在第0行、第0列,跨三列显示。
·label2在第1行、第0列,左右两侧间距40像素。
·entry1在第1行、第1列。
·label3在第2行、第0列,左右两侧间距40像素,上下间距20像素。
·entry2在第2行、第1列。
·label4在第1行、第2列,跨两行显示,左右两侧间距10像素。
·button1在第3行、第1列,跨两列显示。
实现图11-4布局的代码如下:
运行效果如图11-5所示。
图11-5 grid()布局效果
3.place()几何布局管理器
place()几何布局管理器可以指定组件放在一个特定的位置,它分为绝对布局和相对布局。place()常用属性如表11-4所示。
表11-4 place()常用属性
relx、rely在相对布局时使用,relx=0,rely=0的位置是左上角,relx=0.5,rely=-0.5的位置是屏幕中心。
使用place()几何布局管理器实现图11-5所示效果的代码如下: