4. 网格布局

什么是网格布局?

网格布局是最常用的布局管理器之一,它允许你以行(row)和列(column)的方式排列控件,类似于 HTML 表格或 Excel 单元格。grid 提供了灵活的控制方式,适用于复杂的 GUI 设计。

网格布局的概念

  1. 网格(Grid):将窗口或容器(如 Frame)划分为若干行和列,形成单元格。
  2. 控件放置:每个控件可以占据一个或多个单元格。
  3. 对齐方式:可以控制控件在单元格内的对齐方式(如靠左、靠右、居中、拉伸等)。

布局方法

布局方法
说明
widget.grid()
指定控件的起始位置可占用的宽度和高度)

grid 常用属性:

属性
说明
示例和说明
row
控件所在的行(从 0 开始)
row=0(第一行)
column
控件所在的列(从 0 开始)
column=2(第三列)
padx
横向外边距离(同pack布局)
int类型
pady
纵向外边距离(同pack布局)
int类型
ipadx
横向内边距离(同pack布局)
int类型
ipady
纵向内边距离(同pack布局)
int类型
rowspan
跨越行数控件跨越的行数(合并多行)
rowspan=2(占据 2 行)
columnspan
控件跨越的列数(合并多列)
columnspan=3(占据 3 列)
sticky
控件在单元格内的对齐方式(N, S, E, W 或组合,如 N+W)
sticky="nsew"(上下左右拉伸)

grid 网格布局示例1

import tkinter
root = tkinter.Tk(className="魏明择的示例")

btn1 = tkinter.Button(root, text="按钮1")
btn1.grid(row=0, column=0)

btn2 = tkinter.Button(root, text="按钮2")
btn2.grid(row=0, column=1)

btn3 = tkinter.Button(root, text="按钮3")
btn3.grid(row=1, column=1)

btn4 = tkinter.Button(root, text="按钮4")
btn4.grid(row=2, column=2)

root.mainloop()

以上是3行3列的网格布局,按钮可以放在不同的单元格中。

效果如图

tkinter的grid布局效果图

grid 网格布局示例2

import tkinter
root = tkinter.Tk(className="魏明择的Entry示例")

label1 = tkinter.Label(root, text="文字1", bg="green")
label1.grid(row=0, column=0, rowspan=2, ipadx=5, ipady=5, sticky='news')

label2 = tkinter.Label(root, text="文字2", bg='blue')
label2.grid(row=2, column=0, columnspan=2, sticky='news')

label3 = tkinter.Label(root, text="文字3", bg='yellow')
label3.grid(row=1, column=2, rowspan=2, sticky='news')

label4 = tkinter.Label(root, text="文字4", bg='red')
label4.grid(row=0, column=1, columnspan=2, sticky='news')

label4 = tkinter.Label(root, text="文字5", bg='orange')
label4.grid(row=1, column=1, sticky='news')

效果如图

tkinter的grid布局示例图

以上是3行3列的网格布局,Label可以跨越2个或以上的单元格,最终实现了上述复杂的效果。