The Tkinter Pack Geometry Manager [pack]
pack 常见用法
- 将部件放到一个框架内, 并且充满整个框架
- 部件自动摆放, on top of each other
- 部件依次摆放, side by side
不要和 grid 混用
实例 Patterns
1. 充满整个框架 Filling the entire parent widget
from tkinter import *
root = Tk()
listbox = Listbox(root)
listbox.pack()
for i in range(20):
listbox.insert(END, str(i))
mainloop()
默认情况下,listbox控件只显示10个项目。为显示更多项目,必须设置 fill 和 expand 选项,并且改变窗体尺寸大小。
from tkinter import *
root = Tk()
listbox = Listbox(root)
listbox.pack(fill=BOTH, expand=1)
for i in range(20):
listbox.insert(END, str(i))
mainloop()
参数和说明
- expand=bool
- True(1), 窗体改变大小时,控件随之改变,否则 False(0) 时,控件大小不变。
- fill=NONE or X or Y or BOTH
- 当不是 NONE 时,控件的水平和(或)垂直方向随着窗体的改变而填充,即控件大小也会改变。
- 当不设置以上参数或者不改变窗体大小时,可以在控件内滚动鼠标的滚轮以看到其他项目。
2. 部件自动安放 on top of each other
from tkinter import *
root = Tk()
w = Label(root, text="Red", bg="red", fg="white")
w.pack()
w = Label(root, text="Green", bg="green", fg="black")
w.pack()
w = Label(root, text="Blue", bg="blue", fg="white")
w.pack()
mainloop()
使用参数 fill=X 横向填充部件
from tkinter import *
root = Tk()
w = Label(root, text="Red", bg="red", fg="white")
w.pack(fill=X)
w = Label(root, text="Green", bg="green", fg="black")
w.pack(fill=X)
w = Label(root, text="Blue", bg="blue", fg="white")
w.pack(fill=X)
mainloop()
3. 部件并排安放 side by side
from tkinter import *
root = Tk()
w = Label(root, text="Red", bg="red", fg="white")
w.pack(side=LEFT)
w = Label(root, text="Green", bg="green", fg="black")
w.pack(side=LEFT)
w = Label(root, text="Blue", bg="blue", fg="white")
w.pack(side=LEFT)
mainloop()
使用 side 参数来并排安放部件。 可以使用 fill=Y 使控件与窗体等高。
from tkinter import *
root = Tk()
w = Label(root, text="Red", bg="red", fg="white")
w.pack(side=LEFT, fill=Y)
w = Label(root, text="Green", bg="green", fg="black")
w.pack(side=LEFT, fill=Y)
w = Label(root, text="Blue", bg="blue", fg="white")
w.pack(side=LEFT, fill=Y)
mainloop()
参数 Reference
- anchor
- 锚点,部件内容在部件内部的对齐方式。
- default默认值 anchor=CENTER
- anchor=NSEW (or subset) - position widget according to given direction
- expand
- 确定控件是否与随着主窗体空间变大而扩充。
- default默认值 expand=False
- expand=bool - expand widget if parent size grows
- fill
- 确定控件是否填满主窗体提供给它的空间。
- default默认值 fill=NONE
- fill=NONE or X or Y or BOTH - fill widget if widget grows
- ipadx Internal padding
- 水平方向内部与边框的距离
- Default默认值 ipadx=0
- width不为空时,取其较大值。
- ipady Internal padding
- 垂直方向内部与边框的距离
- Default默认值 ipady=0
- height不为空时,取其较大值。
- padx External padding
- 水平方向部件边框与其他部件的距离
- Default默认值 padx=0
- pady External padding
- 垂直方向部件边框其他部件的空间
- Default默认值 pady=0
- side
- 部件在窗体上的方位,水平方向为 sticky=TOP, 垂直方向为 sticky=LEFT
- 默认 sticky=TOP
- side=TOP, LEFT, BOTTOM, RIGHT
- 复杂的部件放置要用到Frame控件,不如用grid函数更简便。
相关函数
- pack_forget()
- 从当前管理器中去除部件,但是并不删除,可以重新显示或者被另一个管理器控制。
- pack_info()
- 返回包含相关参数名称及对应值的字典类型的值。
- pack_propagate(flag)
- 是否允许放置在主部件上的子部件改变大小。