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()
– 以列表的形式返回该组件的所有子组件
– 该方法仅适用于父组件
下一篇: