3.1 pack方法

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()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352