所谓布局,就是指控制窗体容器中各个控件(组件)的位置关系。tkinter 共有三种几何布局管理器,分别是:place布局、pack布局、grid布局。
目录
环境:
1.place 绝对布局
2.pack 相对布局
3.grid 表格布局
环境:
window 10
python 3.7
1.place 绝对布局
place():将控件放置在父控件内的特定位置
x:定义控件的绝对水平位置,默认值是0
y:定义控件的绝对垂直位置,默认值是0
import tkinter as tk
root = tk.Tk()
# 位置在距离窗体左上角的(10,15)坐标处
label1 = tk.Label(bg='red', text='我是label1')
label1.place(x=10, y=15)
# 位置在距离窗体左上角的(30,45)坐标处
label2 = tk.Label(bg='blue', text='我是label2')
label2.place(x=30, y=45)
# 位置在距离窗体左上角的(50,75)坐标处
label3 = tk.Label(bg='yellow', text='我是label3')
label3.place(x=50, y=75)
# 进入程序循环
root.mainloop()
固定坐标,按绝对布局显示,窗口大小的变化对布局没有影响
2.pack 相对布局
pack():将控件放置在父控件内之前,规划此控件在区块内的位置
fill:决定控件如何填满 parcel 的空间,可以是 X、Y、BOTH 或 NONE,此选项必须在 expand 等于 1 才有作用。
当 fill 等于 X 时,窗体会占满整个窗口 X 方向剩余的空间;当 fill 等于 Y 时,窗体会占满整个窗口 Y 方向剩余的空间;
当 fill 等于 BOTH 时,窗体会占满整个窗口剩余的空间;当 fill 等于 NONE 时,窗体维持不变。
side:定义控件放置的位置,可以是 TOP(靠上对齐)、BOTTOM(靠下对齐)、LEFT(靠左对齐)、RIGHT(靠右对齐)。
import tkinter as tk
root = tk.Tk()
# 位置在平行方向的上方
label1 = tk.Label(bg='red', text='我是label1')
label1.pack(fill=tk.X, side=tk.TOP)
# 位置在平行方向的下方
label2 = tk.Label(bg='blue', text='我是label2')
label2.pack(fill=tk.X, side=tk.BOTTOM)
# 位置在垂直方向的左侧
label3 = tk.Label(bg='yellow', text='我是label3')
label3.pack(fill=tk.Y, side=tk.LEFT)
# 位置在垂直方向的右侧
label3 = tk.Label(bg='green', text='我是label4')
label3.pack(fill=tk.Y, side=tk.RIGHT)
# 进入程序循环
root.mainloop()
相对布局,窗体改变对空间有影响
3.grid 表格布局
grid() 方法将控件依照表格的行列方式,来放置在窗体或窗口内。
row:设置控件在表格中的第几列。
column:设置控件在表格中的第几栏。
import tkinter as tk
root = tk.Tk()
text = []
# 将文本描述放入一个列表中
for i in range(1, 10):
text.append('我是button-%d' % i)
# 创建9个button 为显示效果使用button控件
for i in range(3):
for j in range(3):
# 创建9个Button控件 将窗体编排成3X3的表格
tk.Button(root, text=text[j+i*3]).grid(row=i, column=j)
# 进入程序循环
root.mainloop()