PythonTkinter布局管理器之Pack

玩转Python

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

复习回顾

Python Tkinter 不仅提供多样的组件,还提供管理组件的布局管理器,主要有种如下:

我们上一期主要学习Grid布局管理器按网格形式对组件进行布局排列

对比Grid,本期我们将学习另外一种使用更加简单的布局管理器Pack,相关属性和使用方法的学习

⏰ 搓搓双手,打起精神,开启我们今天的学习,Let's go~

1. Pack 布局管理器概述

Pack 布局管理器 是 Tkinter提供的管理一个主窗口的组件布局的方法,可创建浮动,自动伸缩扩展在少量组件的排列上使用Pack布局管理器会更加简单方便。

Pack 布局管理器特点

  • Pack 按照组件的创建顺序将子组件添加到父组件中,按照垂直或者水平方向自然排布。
  • Pack如果不指定任何选项,默认在父组件中自顶向下添加组件
  • Pack 是代码量最少,可以用于快速生成界面

Pack 布局管理器适合的场景

  • 将小型组件放入窗口中,并使其充满这个窗口
  • 将小型组件放在顶部
  • 并排放置多个组件
  • 只适合简单的垂直或者水平排列

2. Pack 常用属性

属性 作用
side 指定停靠方向,可选值:left,top,right,bottom
fill 指定填充颜色,可选值:x(水平方向填充),y(竖直方向填充),both(水平和竖直方向填充),none:不填充
expand 是否可展空间,可选值True/False
anchor 锚定位,指定组件的位置,可选值:N(北/下),E(东/右),S(南/下),W(西/左),CENTER(中间)
padx x方向的外边距
pady y方向的外边距
iPadx x方向的内边距
ipady y方向的内边距

📢重要说明:

  1. side是pack方法最常用属性,side为TOP时示例图如下所示

  2. side为LEFT时示例图如下所示

  3. 组件独占空间

  • 组件所在的位置,会根据位置来占据主窗口可用空间的整行或者整列空间

  • side = TOP/BOTTOM

    (1) 组件会占据整行

    (2) 后续组件只能依次排在其下面或者上面

    (3) 组件为上下排列方式

  • side = LEFT/RIGHT

    (1) 组件会占据整列

    (2) 后续组件只能依次排其左边或者右边

    (3) 组件为左右排列方式

3. 小试牛刀

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

  1. 如上效果图所示,有两个Fream容器组成,分别创建两个容器f1,f2,分别垂直排列

    
    f1 = Frame(self)
    f1.pack()
    
    f2 = Frame(self)
    f2.pack()
    复制代码
  2. Frame1容器里横向排了五个按键

    • 五个按键存在列表里
    • 使用for循环分别创建5个Button对象
    • Button对象主窗口使用f1
    
    btlist = ("popular","chinese","Japanse","Hiap","soft")
    
    for txt in btlist:
    
        Button(f1,text = txt).pack(side = LEFT,padx = "10")
    复制代码
  3. Fream2容器装黑白相间的Label组件

    • Label主主窗口为f2
    • 使用for循环创建20个Label对象
    • Label 背景颜色使用if else语句来控制
    
    btlist = ("popular","chinese","Japanse","Hiap","soft")
    
    for txt in btlist:
    
        Button(f1,text = txt).pack(side = LEFT,padx = "10")
    复制代码
  4. 使用GUI面向对象编程写法,使用Application(Frame)来创建实例对象,创建组件的方法封装给createWidgetPack()方法,通过构造函数创建好组件

  5. 完整代码如下:

    from tkinter import *
    import  random
    class Application(Frame):
    
        def __init__(self,master=None):
           # super()代表的是父类的定义,而不是父类对象
            super().__init__(master)
            self.master = master
            self.pack()
    
            self.CreateWidgetpack()
    
        def CreateWidgetpack(self):
    
            f1 = Frame(self)
            f1.pack()
    
            f2 = Frame(self)
            f2.pack()
    
            btlist = ("popular","chinese","Japanse","Hiap","soft")
    
            for txt in btlist:
    
                Button(f1,text = txt).pack(side = LEFT,padx = "10")
    
            for i in range(1,20):
    
                Label(f2,width = 5,height = 10,borderwidth=1,relief = "solid",bg ="black"if i%2==0 else "white").pack(side ="left",padx =2)
    
    root = Tk()
    root.title("MyfirstAPP")
    app = Application(master=root)
    
    root.mainloop()
    复制代码

总结

本期,我们学习 Python Tkinter 布局管理器Pack

Pack 布局管理器对于简单小组件能快速实现排布效果。

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