Tkinter's pack geometry manager

Tkinter's pack geometry manager

Tkinter在做版面配置有三種方式,pack是其中一種。

 

使用pack來做版面配置,可以設定元件的內邊界、外邊界、是否塞滿、以及要停駐在哪邊。如果不做任何的停駐設定,預設元件是由上往下堆放。以其他程式語言來說,pack這種版面配置方式有點像是Dock與Stack兩種版面配置容器的結合。

 

在使用時若直接呼叫pack方法,元件會由上到下堆放,元件的大小設定多大就是多大,不會隨著視窗大小變動。

...
lbl = Label(form, text="pack test1", bg="red")
lbl.pack()

lbl = Label(form, text="pack test2", bg="yellow")
lbl.pack()

lbl = Label(form, text="pack test3", bg="blue")
lbl.pack()
...

 

image

 

若是叫用pack方法時帶入fill的值,則元件會依照帶入的值去做塞滿。像是帶入X則元件的寬度會塞滿容器,帶入Y則元件的高度會塞滿容器,帶入BOTH則元件的寬度與高度都會塞滿容器(expand記得要設,不然元件可能不會隨容器放大)。

 

這邊也可以帶入side的值去指定元件要停駐在上(TOP)、下(BOTTOM)、左(LEFT)、右(RIGHT)。

...
lbl = Label(form, text="fill test1", bg="red")
lbl.pack(fill=X)

lbl = Label(form, text="fill test2", bg="yellow")
lbl.pack(side=LEFT, fill=Y)

lbl = Label(form, text="fill test2", bg="blue")
lbl.pack(fill=BOTH, expand=1)
...

 

image image

 

如果要設定元件的內外邊界,我們可以在呼叫pack時帶入padx、pady、ipadx、ipady這幾的設定值,padx、pady是外邊界(相當於我們一般所說的margin),ipadx、ipady是內邊界(相當於我們一般所說的padding)。

...
lbl = Label(form, text="pad test", bg="green")
lbl.pack(fill=X, padx=5, pady=5)

lbl = Label(form, text="ipad test", bg="blue")
lbl.pack(fill=X, ipadx=5, ipady=5)
...

 

image

 

Link