4. 网格布局
什么是网格布局?
网格布局是最常用的布局管理器之一,它允许你以行(row)和列(column)的方式排列控件,类似于 HTML 表格或 Excel 单元格。grid 提供了灵活的控制方式,适用于复杂的 GUI 设计。
网格布局的概念
- 网格(Grid):将窗口或容器(如 Frame)划分为若干行和列,形成单元格。
- 控件放置:每个控件可以占据一个或多个单元格。
- 对齐方式:可以控制控件在单元格内的对齐方式(如靠左、靠右、居中、拉伸等)。
布局方法
布局方法
说明
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列的网格布局,按钮可以放在不同的单元格中。
效果如图
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')
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')
效果如图
以上是3行3列的网格布局,Label可以跨越2个或以上的单元格,最终实现了上述复杂的效果。