GUI(图形用户界面)编程就相当于小孩子搭积木,每个积木应该放在哪里,每个积木显示为多大,也就是对大小和位置都需要进行管理,而布局管理器正是负责管理各组件的大小和位置的。
一、Pack布局管理器
使用Pack布局,那么当程序向容器中添加组件时,这些组件会依次向后排列,排列方向既可是水平的,也可是垂直的。
from tkinter import *
root = Tk()
root.title('Pack布局')
for i in range(3):
# bg='#eeeeee'指背景颜色为浅灰色
lab = Label(root, text='第%d个Label' % (i + 1), bg='#eeeeee')
# 调用pack进行布局
lab.pack()
root.mainloop()
pack() 方法支持如下选项:
- anchor:当可用空间大于组件所需要的大小时,该选项决定组件被放置在容器的何处。该选项支持 N(北,表示上), E(东,表示右), S(南,表示下), W(西,表示左), NW(西北,表示左上), NE(东北,表示右上),SW(西南,表示左下), SE(东南,表示右下),
CENTER(中,默认值)- expand:该bool值指定当父类容器增大时是否拉伸组件
- fill:设置组件是否沿水平或者垂直方向填充。该选项支持NONE, X, Y, BOTH四个值。其中NONE表示不填充,BOTH表示沿着两个方向填充。
- ipadx:指定组件在x方向(水平)上的内部留白
- ipady:指定组件在y方向(水平)上的内部留白
- padx:指定组件在x方向(水平)上与其他组件的间距
- pady:指定组件在y方向(水平)上与其他组件的间距
- side:设置组件的添加位置,可以设置为TOP, BOTTOM, LEFT, RIGHT这四个值的其中之一
当程序界面比较复杂时,就需要使用多个容器(Frame)分开布局,然后再将Frame添加到窗口中。
from tkinter import *
class App:
def __init__(self, master):
self.master = master
self.initWidgets()
def initWidgets(self):
# 创建第一个容器
fm1 = Frame(self.master)
# 该容器放在左边排列
fm1.pack(side=LEFT, fill=BOTH, expand=YES)
# 向fm1中添加三个按钮
# 设置按钮从顶部开始排列,且按钮只能在水平(x)方向上填充
Button(fm1, text='fm1第一个').pack(side=TOP, fill=X, expand=YES)
Button(fm1