Python Tkinter 布局管理器之Grid

1,905 阅读4分钟

玩转Python

这是我参与8月更文挑战的第29天,活动详情查看: 8月更文挑战

1. 布局管理器概述

我们在前面在 GUI编程框架认识 掌握和学习到 GUI 编程分为两步

  • 第一步:创建组件放入到容器
  • 第二步:使用布局管理器对容器组件进行排版

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这个参数用来确定:在插件正常尺寸下,如何分配单元中多余的空间
ipadxx方向的内部填充,在插件内部,左右方向各填充指定长度的空间
ipadyy方向的内部填充,在插件内部,上下方向各填充指定长度的空间
padxx方向的外部填充,在插件外部,左右方向各填充指定长度的空间
padyy方向的内部填充,在插件内部,上下方向各填充指定长度的空间
in_用in_=w2 可以将w 登记为W2的child插件,W2 必须是W创建时指定parent插件的Child插件

📢重要说明:

  1. 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,在水平和垂直方向上延伸插件,填满单元
  1. 不要在一个主窗口中混合使用pack和grid

4. 小试牛刀

Grid 布局管理器练习效果如下:

  1. 首先我们可以使用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)
    
  2. Frame(容器)里面存放计算器🧮按键,按键是由四行四列组成的网格

    Bu = Button (p,text = names[i], font = ("Verdana",20),width =6 )
    
  3. 使用循环来生成计算器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)
    
  4. 使用GUI面向对象编程写法,使用Application(Frame)来创建实例对象,创建组件的方法封装给createWidget()方法,通过构造函数创建好组件

  5. 完整代码如下:

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 对组件进行网格式水平和垂直进行排版,方便我们更好地使用

以上是本期内容,欢迎大佬们点赞评论指正,下次见~ღ( ´・ᴗ・` )比心🌹🌹