这是我参与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方向的内边距 |
📢重要说明:
-
side是pack方法最常用属性,side为TOP时示例图如下所示
-
side为LEFT时示例图如下所示
-
组件独占空间
-
组件所在的位置,会根据位置来占据主窗口可用空间的整行或者整列空间
-
side = TOP/BOTTOM
(1) 组件会占据整行
(2) 后续组件只能依次排在其下面或者上面
(3) 组件为上下排列方式
-
side = LEFT/RIGHT
(1) 组件会占据整列
(2) 后续组件只能依次排其左边或者右边
(3) 组件为左右排列方式
3. 小试牛刀
Pack 布局管理器练习效果如下:
-
如上效果图所示,有两个Fream容器组成,分别创建两个容器f1,f2,分别垂直排列
f1 = Frame(self) f1.pack() f2 = Frame(self) f2.pack() 复制代码
-
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") 复制代码
-
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") 复制代码
-
使用GUI面向对象编程写法,使用Application(Frame)来创建实例对象,创建组件的方法封装给createWidgetPack()方法,通过构造函数创建好组件
-
完整代码如下:
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 布局管理器对于简单小组件能快速实现排布效果。
以上是本期内容,欢迎大佬们点赞评论指正,下次见~ღ( ´・ᴗ・` )比心🌹🌹
近期评论