Python Tkinter 布局管理器之Grid
1. 布局管理器概述
- 第一步:创建组件放入到容器
- 第二步:使用布局管理器对容器组件进行排版
GUI 编程就相当于小孩子搭积木,每个积木块应该放在哪里,每个积木块显示为多大,也就是对大小和位置都需要进行管理,而布局管理正是负责管理各组件的大小和位置的。此为,当用户调整了窗口的大小之后,布局管理器还会自动调整窗口中各组件的大小和位置。
python Tkinter提供了负责管理各个组件的大小和位置的布局管理器
- 布局管理器能帮助我们组织、管理在父组件中子组件的布局方式
- Tkinter 提供了三种管理器:pack、grid、place
本期,我们将学习Python Tkinter的布局管理Grid相关属性和方法,Let's go~
2. Grid布局管理器
Grid 表格布局器,采用表格结构组件。子组件的位置由行和列的单元格来确定,并且可以可以跨行和跨列,从而实现复杂的布局。
Grid 把组件空间分解成一个网格进行维护,即按照行、列的方式排列组件,组件位置由其所在的行号和列号决定:
- 行号相同而列号不同的几个组件会被依次上下排列
- 列号相同而行号不同的几个组件会被依次左右排列
例如使用Grid布局管理器对登陆界面进行排版示例图:
3. Grid常用属性
属性 | 作用 |
---|---|
column | 指定将组件放入哪列。第一列的索引为0 |
columnspan | 指定组件横跨多少列 |
row | 指定组件放入哪行。第一行的索引为0 |
rowspan | 指定组件横跨多少行 |
sticky | 这个参数用来确定:在插件正常尺寸下,如何分配单元中多余的空间 |
ipadx | x方向的内部填充,在插件内部,左右方向各填充指定长度的空间 |
ipady | y方向的内部填充,在插件内部,上下方向各填充指定长度的空间 |
padx | x方向的外部填充,在插件外部,左右方向各填充指定长度的空间 |
pady | y方向的内部填充,在插件内部,上下方向各填充指定长度的空间 |
in_ | 用in_=w2 可以将w 登记为W2的child插件,W2 必须是W创建时指定parent插件的Child插件 |
📢重要说明:
- sticky属性
- 如果没有声明sticky属性,默认将插件居中于单元中
- 通过设置 sticky= tk.NE(靠右上方),sticky=tk.SE(靠右下方),sticky=tk.SW(靠左下方),sticky=tk.NW(靠左上方),可以将插件布置在单元的某个角落。
- 通过设置 sticky= tk.N(靠上方),sticky= tk.E(靠右方),sticky= tk.S(靠下方),sticky= tk.W(靠左方),可以将插件布置在单元的某个方向上
- 通过设置sticky= tk.N+tk.S,在垂直方向上延伸插件,并保持水平居中
- 通过设置sticky= tk.E+tk.W,在水平方向上延伸插件,并保持垂直居中
- 通过设置sticky= tk.N+tk.E+tk.W,在水平和垂直方向上延伸插件,填满单元
- 不要在一个主窗口中混合使用pack和grid
4. 小试牛刀
Grid 布局管理器练习效果如下:
-
首先我们可以使用Pack布局管理器管理两个组件Entry(输入框)和Frame(容器)
self.En = Entry(relief=SUNKEN,font = ('Courier New',24),width = 25) self.En.pack(side = TOP,pady =10) p = Frame(self.master) p.pack(side = TOP)
-
Frame(容器)里面存放计算器🧮按键,按键是由四行四列组成的网格
Bu = Button (p,text = names[i], font = ("Verdana",20),width =6 )
-
使用循环来生成计算器16个按键,并且使用Grid来对它们进行排版
for i in range(len(names)): Bu = Button (p,text = names[i], font = ("Verdana",20),width =6 ) Bu.grid(row=i//4,column=i % 4)
-
使用GUI面向对象编程写法,使用Application(Frame)来创建实例对象,创建组件的方法封装给createWidget()方法,通过构造函数创建好组件
-
完整代码如下:
from tkinter import *
import tkinter
class Application(Frame):
def __init__(self,master=None):
super().__init__(master)
self.master = master
self.Createwidget()
def Createwidget(self):
self.En = Entry(relief=SUNKEN,font = ('Courier New',24),width = 25)
self.En.pack(side = TOP,pady =10)
p = Frame(self.master)
p.pack(side = TOP)
names = ("0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","=")
for i in range(len(names)):
Bu = Button (p,text = names[i], font = ("Verdana",20),width =6 )
Bu.grid(row=i//4,column=i % 4)
root = Tk()
root.title("MyfirstApp")
app = Application(master=root)
root.mainloop()
总结
本期,我们学习 Python Tkinter 提供网格布局管理器Grid
Grid 对组件进行网格式水平和垂直进行排版,方便我们更好地使用
以上是本期内容,欢迎大佬们点赞评论指正,下次见~ღ( ´・ᴗ・` )比心🌹🌹
转载自:https://juejin.cn/post/7001685575329644551