Grid 布局管理器详解
1、一个经典的面向程序写法模块
from tkinter import *
from tkinter import messagebox
# 导入库文件
class Appication(Frame):
"""
一个经典的 GUI 类的写法
"""
# 定义类(Appication)、继承于 Frame 框架 (虚拟的矩形框架)
def __init__(self, master = None):
# 定义构造函数、并初始化父类为空
super().__init__(master)
# 通过 super() 调用父类、并将 master 传进去
self.master = master
# 令此类中的 master 等于传入的 window
self.pack()
# 布局此窗口
self.CreateWidget()
# 调用另一个函数 CreateWidget
def CreateWidget(self):
"""
用途:创建组件
"""
......
......
if __name__ == "__main__":
window = Tk()
# 创建主窗口
window.geometry("500x200+200+200")
window.title('一个经典的GUI程序')
# 对窗口进行大小、位置及名字设置
app = Appication(master = window)
# 调用新创建的类、并进行初始化、将 master = window (主窗口)传递进去
window.mainloop()
# 调用 mainloop 方法、启用窗口并进入事件循环
2、布局管理器讲解(grid)
grid 布局管理器
- grid 表格布局,采用表格结构组织构件
- 子组件的位置由行和列的单元格来确定
- 并且可以跨行和跨列,从而实现复杂的布局
选项 | 说明 | 取值范围 |
---|---|---|
column | 单元格的列号 | 从 0 开始的正整数 |
columnspan | 跨列,跨越的列数 | 正整数 |
row | 单元格的行号 | 从 0 开始的正整数 |
rowspan | 跨行,跨越的行数 | 正整数 |
ipadx, ipady | 设置子组件之间的间隔,x 方向或者 y 方向,默认单位是像素 | 非浮点数,默认0.0 |
padx, pady | 与之并列的组件之间的间隔,x 方向或者 y 方向,默认单位是像素 | 非浮点数,默认0.0 |
sticky | 组件紧贴所在单元格的某一角,对应东南西北以及 4 个角 | " n ","s","w","e","nw","sw","se","ne" 等 |
3、布局管理器代码(grid)
# class Appication(Frame):
# """
# 一个经典的 GUI 类的写法
# """
def CreateWidget(self):
"""
用途:创建组件
"""
# 对于 grid 布局管理器、row 代表行号、column 代表列号 (均是从 0 开始)
self.label1 = Label(self, text = "用户名")
# 创建 label1 标签与文本 "用户名" 绑定
self.label1.grid(row = 0, column = 0)
# 布局标签 label1
self.entry1 = Entry(self)
# 创建 entry1 单行文本框
self.entry1.grid(row = 0, column = 1)
# 布局entry1 单行文本框
Label(self, text = "用户名为手机号").grid(row = 0, column = 2)
# 创建标签与文本 "用户名为手机号" 绑定并且进行布局
Label(self, text = "密码").grid(row = 1, column = 0)
# 创建标签与文本 "密码" 绑定并且进行布局
Entry(self, show = "*").grid(row = 1, column = 1)
# 创建单行文本框 (以暗文方式展示) 并且进行布局
# sticky 代表组件紧贴在单元格的某一角
Button(self, text = "登录").grid(row = 2, column = 1, sticky = EW)
# 创建按钮与文本 "登录" 绑定并且进行布局
Button(self, text = "取消").grid(row = 2, column = 2, sticky = E)
# 创建按钮与文本 "取消" 绑定并且进行布局
4、源代码
from tkinter import *
from tkinter import messagebox
import random
# 导入库文件
class Appication(Frame):
"""
一个经典的 GUI 类的写法
"""
def __init__(self, master = None):
# 定义构造函数、并初始化父类为空
super().__init__(master)
# 通过 super() 调用父类、并将 master 传进去
self.master = master
# 令此类中的 master 等于传入的 window
self.pack()
# 布局此窗口
self.CreateWidget()
# 调用另一个函数 CreateWidget
def CreateWidget(self):
"""
用途:创建组件
"""
# 对于 grid 布局管理器、row 代表行号、column 代表列号 (均是从 0 开始)
self.label1 = Label(self, text = "用户名")
# 创建 label1 标签与文本 "用户名" 绑定
self.label1.grid(row = 0, column = 0)
# 布局标签 label1
self.entry1 = Entry(self)
# 创建 entry1 单行文本框
self.entry1.grid(row = 0, column = 1)
# 布局entry1 单行文本框
Label(self, text = "用户名为手机号").grid(row = 0, column = 2)
# 创建标签与文本 "用户名为手机号" 绑定并且进行布局
Label(self, text = "密码").grid(row = 1, column = 0)
# 创建标签与文本 "密码" 绑定并且进行布局
Entry(self, show = "*").grid(row = 1, column = 1)
# 创建单行文本框 (以暗文方式展示) 并且进行布局
# sticky 代表组件紧贴在单元格的某一角
Button(self, text = "登录").grid(row = 2, column = 1, sticky = EW)
# 创建按钮与文本 "登录" 绑定并且进行布局
Button(self, text = "取消").grid(row = 2, column = 2, sticky = E)
# 创建按钮与文本 "取消" 绑定并且进行布局
if __name__ == "__main__":
window = Tk()
# 创建主窗口
window.geometry("600x600+100+100")
window.title('一个经典的GUI程序')
# 对窗口进行大小、位置及名字设置
app = Appication(master = window)
# 调用新创建的类、并进行初始化、将 master = window (主窗口)传递进去
window.mainloop()
# 调用 mainloop 方法、启用窗口并进入事件循环