一、pack简介
在tkinter中,用于管理所有组件在窗口界面布局的有三种方法:pack、grid、place。
- pack 按添加顺序排列组件
- grid 按行列形式排列组件
- place 能够实现自定义排列组件
今天,我们来具体聊聊 pack 管理器。
pack 管理器是根据我们在代码中添加组件的顺序依次排列所有组件,非常简单方便。
通常来说,pack 适用于少量组件或简单布局的情况。它不像 place 和 grid 布局管理器需要计算位置(坐标或者行列),pack 只有上下左右的关系,一个个按添加顺序放上去即可。=
当然如果要进行复杂的布局结构,pack 与 Frame 组件结合起来使用,也能够实现很好的效果。
但是需要非常注意的,不要在同一个父组件中同时使用 pack 和 grid,会造成tkinter在不断计算分析该先使用哪个布局管理器。
很可能你等半天也不会有结果的…
二、运用实例
——
1. pack 纵向依次排列
在默认情况下,使用 pack 方法就是将各个组件按照添加顺序纵向依次排列。
import tkinter as tk
root = tk.Tk()
tk.Label(root, text="Red", bg="red", fg="white").pack()
tk.Label(root, text="Yellow", bg="yellow", fg="black").pack()
tk.Label(root, text="Green", bg="green", fg="white").pack()
tk.Label(root, text="Blue", bg="blue", fg="white").pack()
root.mainloop()
运行程序,那么是这个样子滴。
——
2. pack 横向依次排列
如果我们希望所有组件按照顺序横向依次排列,我们可以添加参数 side='left'
,从而就实现了从左往右的横向排列效果。
import tkinter as tk
root = tk.Tk()
tk.Label(root, text="Red", bg="red", fg="white").pack(side='left')
tk.Label(root, text="Yellow", bg="yellow", fg="black").pack(side='left')
tk.Label(root, text="Green", bg="green", fg="white").pack(side='left')
tk.Label(root, text="Blue", bg="blue", fg="white").pack(side='left')
root.mainloop()
运行程序,呈现这样子的效果
——
3. pack 的复杂布局效果
我们再来试一试相对比较多的组件下复杂的 pack 布局。
为了实现整个布局的整齐美观,我们通常会设置fill、expand参数。
fill 表示填充分配空间
- x:水平方向填充
- y:竖直方向填充
- both:水平和竖直方向填充
- none:不填充(默认值)
expand 表示是否填充父组件的额外空间
- True 扩展整个空白区
- False 不扩展(默认值)
import tkinter as tk
root = tk.Tk()
letter = ['A','B','C','D','E']
for i in letter:
tk.Label(root, text=i, relief='groove').pack(fill='both', expand=True)
for i in letter:
tk.Label(root, text=i, relief='groove').pack(side='left', fill='both', expand=True)
for i in letter:
tk.Label(root, text=i, relief='groove').pack(side='bottom', fill='both', expand=True)
for i in letter:
tk.Label(root, text=i, relief='groove').pack(side='right',fill='both', expand=True)
root.mainloop()
我们来对比一下,和没有设置fill、expand参数的情况下。
其中的机制,需要各位自己细细体会哈。
三、参数方法
——
1. 参数汇总
布局管理器 pack 涉及的相关参数以及用法。
——
2. 方法汇总
pack_configure(**options)
- 跟 pack() 一样
pack_forget()
- 将组件从屏幕中“删除”
- 并没有销毁该组件,只是看不到了
- 可以通过 pack 或其他布局管理器显示已“删除”的组件
pack_info()
- 以字典的形式返回当前 pack 的选项
pack_propagate(flag)
- 如果开启,父组件会自动调节尺寸以容纳所有子组件
- 默认值是开启(flag = True)
- 该方法仅适用于父组件
pack_slaves()
- 以列表的形式返回该组件的所有子组件
- 该方法仅适用于父组件