pack方法
虽然我们称pack方法,其实在tkinter内这是一个类别。这是最常使用的控件配置管理方法,
它是使用相对位置的概念处理Widget控件配置,至于控件的正确位置则是由pack方法自动
完成。pack方法的语法格式如下:
pack(options,···)
options参数可以是side、fill、padx/pady、ipadx/ipady、anchor
side参数
side参数可以垂直或水平配置控件,在进一步讲解前先看下列程序实例:
from tkinter import *
window=Tk()
window.title("ch3_1")
''
lab1=Label(window,text="明志科技大学",
bg="lightyellow")
lab2=Label(window,text="长庚大学",
bg="lightgreen")
lab3=Label(window,text="长庚科技大学",
bg="lightblue")
lab1.pack()
lab2.pack()
lab3.pack()
window.mainloop()
由上图可以看到,当窗口中有多个组件时,使用pack可以让组件由上往下排列显示,
其实这也是系统的默认设置。使用pack()方法时,可以增加side参数设置组件的排列
方式,此参数的取值如下。
TOP:这是默认值,由上往下排列。
BOTTOM:由下往上排列。
LEFT:由左往右排列。
RIGHT:由右往左排列。
from tkinter import *
window=Tk()
window.title("ch3_2")
''
lab1=Label(window,text="明志科技大学",
bg="lightyellow",
width=15)
lab2=Label(window,text="长庚大学",
bg="lightgreen",
width=15)
lab3=Label(window,text="长庚科技大学",
bg="lightblue",
width=15))
lab1.pack(side=BOTTOM)
lab2.pack(side=BOTTOM)
lab3.pack(side=BOTTOM)
window.mainloop()
padx/pady参数
另外,在使用pack方法时,可以使用padx/pady参数设定控件边框与容器的距离或是控件边界间的
距离。在默认环境下窗口控件间的距离是1像素,如果希望有适度间距,可以设置padx/pady,代表水平间距/
垂直间距,可以分别在组件间增加间距。
样例:在"长庚大学"标签上下增加10像素间距。
from tkinter import *
window=Tk()
window.title("ch3_6")
''
lab1=Label(window,text="明志科技大学",
bg="lightyellow")
lab2=Label(window,text="长庚大学",
bg="lightgreen")
lab3=Label(window,text="长庚科技大学",
bg="lightblue")
lab1.pack(fill=X)
lab2.pack(pady=10)
lab3.pack(fill=X)
window.mainloop()
ipadx/ipady参数
ipadx参数可以控制标签文字与标签容器的x轴间距,ipady参数可以控制标签文字与
标签容器的y轴间距。
from tkinter import *
window.title("ch3_10")
''
lab1=Label(window,text="明志科技大学",
bg="lightyellow")
lab2=Label(window,text="长庚大学",
bg="lightgreen")
lab3=Label(window,text="长庚科技大学",
bg="lightblue")
lab1.pack()
lab2.pack(ipadx=10)
lab3.pack()
window.mainloop()
anchor参数
这个参数可以设定Widget控件在窗口中的位置,指控件内容在控件区域的位置设置。
NW N NE
W CENTER E
SW S SE
样例:在窗口右下方建立一个内容为"OK"的标签,其中,标签与窗口右边和下方的间距是10像素。
from tkinter import *
root=Tk()
root.title("ch3_12")
''
root.geometry("300x180")
''
oklabel=Label(root,text="OK",
font="Times 20 bold",
fg="white",bg="blue")
oklabel.pack(anchor=S,side=RIGHT,
padx=10,pady=10)
fill参数
fill参数的主要功能是告诉pack管理程序,设置控件填满所需分配容器区间的方式,如果是fill=X表示控件可以填满
所分配空间的X轴不留白,如果是fill=Y表示空间可以填满所分配空间的Y轴不留白,如果是fill=BOTH表示空间可以
填满所分配空间的X轴和Y轴。fill默认是NONE,表示保持原大小。
样例:第一个和第三个标签在pack方法内增加fill=X参数。
from tkinter import *
window=Tk()
window.title("ch3_14")
''
lab1=Label(window,text="明志科技大学",
bg="lightyellow")
lab2=Label(window,text="长庚大学",
bg="lightgreen")
lab3=Label(window,text="长庚科技大学",
bg="lightblue")
lab1.pack(fill=X)
lab2.pack()
lab3.pack(fill=X)
window.mainloop()
如果所分配容器区间已经满了,则使用此fill参数将不会由任何作用。fill参数在使用上仍有些复杂,如果
要设计复杂的Widget空间布局,建议使用grid方法。
expand参数
expand参数可设定Widget空间是否填满额外的父容器空间,默认是False(或是0),
表示不填满,如果是True(或是1)表示填满。
样例:从上到下配置标签,体会expand参数与fill参数的应用
from tkinter import *
root=Tk()
root.title("ch_21")
''
root.geometry("300x200")
''
Label(root,text='Mississippi',bg='red',fg='white',
font='Times 24 bold').pack(fill=X)
Label(root,text='Kentucky',bg='green',fg='white',
font='Arial 24 bold italic').pack(fill=BOTH,expand=True)
Label(root,text='Purdue',bg='blue',fg='white',
font='Times 24 bold').pack(fil=X)
root.mainloop()
pack的方法
pack其实在Python tkinter中是一个类别,它提供下列方法供我们使用。
方法名称 说明
slaves() 传回所有Widget空间对象
info() 传回pack选项的对应值
forget() 隐藏Widget空间,可以用pack(option,···)复原显示
location(x,y) 传回此点是否在单元格,如果是传回坐标,如果不是传回(-1,-1)
size() 传回Widget控件大小
propagate(boolean) 参数是True表示父窗口大小由子控件决定,默认为True。
样例,列出执行前后Widget控件中的内容。
from tkinter import *
root=Tk()
root.title("ch3_23")
''
root.geometry("300x180")
''
print("执行前",root.pack_slaves())
执行前 []
oklabel=Label(root,text="OK",
font="Times 20 bold",
fg="white",bg="blue")
oklabel.pack(anchor=S,side=RIGHT,
padx=10,pady=10)
nolabel=Label(root,text="NO",
font="Times 20 bold",
fg="white",bg="red")
nolabel.pack(anchor=S,side=RIGHT,
pady=10)
print("执行后",root.pack_slaves())
执行后 [<tkinter.Label object .!label2>, <tkinter.Label object .!label3>]
root.mainloop()