【tkinter布局管理】pack:上下左右,按添加顺序排列

本文介绍了tkinter的布局管理器pack,详细解析了pack如何按添加顺序排列组件,包括纵向、横向排列及复杂布局效果。通过实例展示了pack的fill、expand参数在布局中的应用,并列举了pack的相关参数和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述


一、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()

  • 以列表的形式返回该组件的所有子组件
  • 该方法仅适用于父组件

在这里插入图片描述在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值