2. 打包布局
什么是打包布局?
打包布局类似向行李箱里摆放积木块,有空间就放进去。默认上而下依次摆放。当然也可以设置参数来自下向上或自左向右摆放。
打包布局的方式比较简单。适合简单的布局场景。
布局方法
布局方法
说明
widget.pack()
按顺序自动排列控件(垂直或水平)
pack 常用属性:
属性
说明
类型
side
停靠窗口位置
str=tkinter.TOP、tkinter.BOTTOM、tkinter.LEFT、tkinter.RIGHT
padx
横向外边距离
int
pady
纵向外边距离
int
ipadx
横向内边距离
int
ipady
纵向内边距离
int
fill
填充方向
tkinter.NONE, tkinter.X, tkinter.Y, tkinter.BOTH
expand
是否扩展
int = 1或0(默认值)
side 属性:
用来设置打包放置边
值:
- tkinter.LEFT (左)
- tkinter.RIGHT (右)
- tkinter.TOP (上)
- tkinter.BOTTOM (下)
fill属性:
用于在某个方向上填充空白区域
值:
- tkinter.NONE (默认)
- tkinter.X (水平方向)
- tkinter.Y (竖直方向)
- tkinter.BOTH (水平竖直两个方向)
expand 属性
填充整个空白区域
值:
- 0 不扩展(默认)
- 1 扩展
说明:
当expand值为1时,side 属性设置无效
ipadx/ipady 属性
设置内边距的值,默认单位为像素
值:
- 0~n的整数值
padx/pady 属性
设置外边距的值,默认单位为像素
值:
- 0~n的整数(默认为0)
pack() 参数详解
以下用含有两个控件的窗口的布局来说明上述参数的含义,请注意观察 widget.pack()
内部参数的变化!
- 上下两个控件,控件占用的空间就是内部文字占用的空间。默认自上而下排列,依次挨着。主窗口下方空余,两个控件都不会占用。
# 上下两个控件,widget.pack 无参数,都使用默认值!
import tkinter
root = tkinter.Tk(className="pack布局示例")
# 设置 label 的背景色为灰色,好区分边界。
label = tkinter.Label(root, text="欢迎来到weimingze.com!", bg="grey")
label.pack()
btn = tkinter.Button(root, text="点我退出!", command=root.destroy)
btn.pack()
root.mainloop()
效果如图
- 上下两个控件,让Label控件的文字左右两侧内边距空余 20 个像素,内侧上下空余10个像素。使用ipadx和ipady来设置预留widget占用的空间。
import tkinter
root = tkinter.Tk(className="pack布局示例")
# 设置 label 的背景色为灰色,好区分边界。
label = tkinter.Label(root, text="欢迎来到weimingze.com!", bg="grey")
label.pack(ipadx=20, ipady=10)
btn = tkinter.Button(root, text="点我退出!", command=root.destroy, bg='red')
btn.pack()
root.mainloop()
效果如图
- 上下两个控件,让Label控件的文字左右两侧外边距空余 50 个像素。上下预留 20个像素的空间。使用padx和pady来设置。
import tkinter
root = tkinter.Tk(className="pack布局示例")
# 设置 label 的背景色为灰色,好区分边界。
label = tkinter.Label(root, text="欢迎来到weimingze.com!", bg="grey")
label.pack(padx=50, pady=20)
btn = tkinter.Button(root, text="点我退出!", command=root.destroy, bg='red')
btn.pack()
root.mainloop()
效果如图
- 上下两个控件,让Label控件填充主窗口x轴方向所有的空间。使用fill来设置。
import tkinter
root = tkinter.Tk(className="pack布局示例")
# 设置 label 的背景色为灰色,好区分边界。
label = tkinter.Label(root, text="欢迎来到weimingze.com!", bg="grey")
label.pack(fill=tkinter.X)
btn = tkinter.Button(root, text="点我退出!", command=root.destroy, bg='red')
btn.pack()
root.mainloop()
效果如图
- 上下两个控件,让Label控件扩展到主窗口所有的剩余空间。将Button控件挤到下面,使用expand=1来设置。
import tkinter
root = tkinter.Tk(className="pack布局示例")
# 设置 label 的背景色为灰色,好区分边界。
label = tkinter.Label(root, text="欢迎来到weimingze.com!", bg="grey")
label.pack(expand=1)
btn = tkinter.Button(root, text="点我退出!", command=root.destroy, bg='red')
btn.pack()
root.mainloop()
Label控件占据红框区域。 效果如图
- 上下两个控件,让Label和Button控件同时扩展到主窗口所有的剩余空间。使用expand=1来设置。
import tkinter
root = tkinter.Tk(className="pack布局示例")
# 设置 label 的背景色为灰色,好区分边界。
label = tkinter.Label(root, text="欢迎来到weimingze.com!", bg="grey")
label.pack(expand=1)
btn = tkinter.Button(root, text="点我退出!", command=root.destroy, bg='red')
btn.pack(expand=1)
root.mainloop()
两个控件平分主窗口空间。
效果如图
- 让Label和Button两个控件左右排布。使用side属性来设置。
import tkinter
root = tkinter.Tk(className="pack布局示例")
# 设置 label 的背景色为灰色,好区分边界。
label = tkinter.Label(root, text="欢迎来到weimingze.com!", bg="grey")
label.pack(side=tkinter.LEFT)
btn = tkinter.Button(root, text="点我退出!", command=root.destroy, bg='red')
btn.pack(side=tkinter.LEFT)
root.mainloop()
两个控件都向左依次排列。
- 让Label和Button两个控件左右排布。使用side属性来设置。
import tkinter
root = tkinter.Tk(className="pack布局示例")
# 设置 label 的背景色为灰色,好区分边界。
label = tkinter.Label(root, text="欢迎来到weimingze.com!", bg="grey")
label.pack(side=tkinter.LEFT)
btn = tkinter.Button(root, text="点我退出!", command=root.destroy, bg='red')
btn.pack(side=tkinter.RIGHT)
root.mainloop()
两个控件Label 靠左,Button靠右 排列。
效果如图
动手来试试吧!