Python ---Tkinter 布局管理器:pack

                                         The Tkinter Pack Geometry Manage

##简介
pack、grid 和 place 均用于管理同在一个父组件下的所有组件的布局,其中:
         ❤ pack 是按添加顺序排列组件
         ❤ grid 是按行/列形式排列组件
         ❤ place 则允许程序员指定组件的大小和位置

##何时使用 pack 管理器?

对比 grid 管理器,pack 更适用于少量组件的排列,但它在使用上更加简单(就像我们前边所有的例子中,展示一个组件我们一般都直接使用 .pack(),多简单~)。如果你需要创建相对复杂的布局结构,那么建议是使用多个框架(Frame)结构构成,或者使用 grid 管理器实现。

注意:不要在同一个父组件中混合使用 pack 和 grid,因为 Tkinter 会很认真地在那儿计算到底先使用那个布局管理器…以至于你等了半个小时,Tkinter 还在那儿纠结不出结果!

##用法

下面来演示将一个组件放进另一个组件里,并且要求是填充另一个组件:

from tkinter import *

root = Tk()

listbox =Listbox(root)
listbox.pack(fill=BOTH,expand=True)

for i in range(10):
     listbox.insert(END,str(i))

mainloop()

在这里插入图片描述                     在这里插入图片描述
   (解析:这里用的是listbox组件放到root窗口也是组件,实例化好后,接着用pack来布局,listbox.pack(fill=BOTH,expand=True),fill=BOTH就是让他填充满他的父组件,然后在设置一个expand选项为True,然后用insert方法往listbox里面添加,运行就可以了

   生成之后呢,可以看到listbox跟root窗口是紧贴在一起的,因为我们用了fill选项来告诉pack布局管理器,里边的组件的熬紧挨着他的老爸,紧挨着他的父组件,然后expand=True就是说当延长拉伸窗口的时候,他里面的组件会跟着填充,所以expand选项就是告诉窗口管理器,将父组件的额外空间也给填满,如图二)

上面提到,pack是按照组件的添加顺序依次排列的,那先来看看他是横向排列还是纵向排列

from tkinter import *

root = Tk()

Label(root,text="red",bg="red",fg="white").pack(fill=X)
Label(root,text="green",bg="green",fg="black").pack(fill=X)
Label(root,text="blue",bg="blue",fg="white").pack(fill=X)

mainloop()

在这里插入图片描述
   (解析:这里就是连续创建了三个Label标签,然后用pick依次放入到root窗口中去,其中选项中bg表示背景色,fg表示前景色,即字体的颜色,fill=X表示横向填充,BOTH就是横向和纵向,Y就是纵向填充,运行后可以看到他是纵向填充的)

那我们就可以使用 side 选项来实现横向填充,都设置为LEFT,他就每一次都往左边去挤,他就是横向填充了
在这里插入图片描述
##方法

注:下边所有方法适用于所有组件

pack(**options)

– 下方表格详细列举了各个选项的具体含义和用法:

选项 含义
anchor 1. 控制组件在 pack 分配的空间中的位置
2. "n", "ne", "e", "se", "s", "sw", "w", "nw", 或者 "center" 来定位(ewsn 代表东西南北,上北下南左西右东)
3. 默认值是 "center"
expand 1. 指定是否填充父组件的额外空间
2. 默认值是 False
fill 1. 指定填充 pack 分配的空间
2. 默认值是 NONE,表示保持子组件的原始尺寸
3. 还可以使用的值有:"x"(水平填充),"y"(垂直填充)和 "both"(水平和垂直填充)
in_ 1. 将该组件放到该选项指定的组件中
2. 指定的组件必须是该组件的父组件
ipadx 指定水平方向上的内边距
ipady 指定垂直方向上的内边距
padx 指定水平方向上的外边距
pady 指定垂直方向上的外边距
side 1. 指定组件的放置位置
2. 默认值是 "top"
3. 还可以设置的值有:"left","bottom","right"

pack_configure(**options)
– 跟 pack() 一样

pack_forget()
– 将组件从屏幕中“删除”
– 并没有销毁该组件,只是看不到了
– 可以通过 pack 或其他布局管理器显示已“删除”的组件

pack_info()
– 以字典的形式返回当前 pack 的选项

pack_propagate(flag)
– 如果开启,父组件会自动调节尺寸以容纳所有子组件
– 默认值是开启(flag = True)
– 该方法仅适用于父组件

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


下一篇:
发布了252 篇原创文章 · 获赞 117 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/w15977858408/article/details/104226540