Pack 基本版面佈局
通常在使用 tkinter 時,第一步都會使用 pack() 方法來放置元件,這篇教學會介紹如何使用 pack() 方法,並進行基本的元件排版佈局。
快速導覽:
因為 Google Colab 不支援 tkinter,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda )。
使用 pack()
使用 tkinter 相關方法建立元件後,必須搭配 pack() 才能將該元件放到另外一個指定的元件裡,以下方的例子而言,有兩個 Label 都指向 root ( 主視窗元件 ),使用 pack() 後就會按照執行的順序,由上而下放置。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
a = tk.Label(root, text='AAA', background='#f90')
b = tk.Label(root, text='BBB', background='#09c')
a.pack()
b.pack()
root.mainloop()
fill 參數
pack() 的 fill 參數預設使用元件寬度,設定 fill='x' 表示和放置的父元件同寬 ( 必須搭配 side 參數設定預設值、top、bottom 或 expand 參數 ),設定 fill='y' 表示和放置的父元件同高 ( 必須搭配 side 參數設定 left、right 或 expand 參數 ),設定 fill='both' 表示同時撐滿水平和垂直方向。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
a = tk.Label(root, text='AAA', background='#f90')
b = tk.Label(root, text='BBB', background='#09c')
a.pack(fill='x')
b.pack(fill='y', side='left')
root.mainloop()
expand 參數
如果要讓兩個元件一個一半的撐滿某個方向,可以使用 fill 參數配 expand 參數,expand 預設為 0 表示使用元件本身長寬,若設定為 1 則會展開。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
a = tk.Label(root, text='AAA', background='#f90')
b = tk.Label(root, text='BBB', background='#09c')
a.pack(fill='y', expand=1)
b.pack(fill='both', expand=1)
root.mainloop()
padx、pady、ipadx、ipady 參數
pack() 的 padx 參數表示左右外邊距,pady 表示上下外邊距,ipadx 表示左右內邊距,ipady 表示上下內邊距,四個參數預設值均為 0,下方的程式碼執行後,會表現出不同參數設定的結果。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
a = tk.Label(root, text='AAA', background='#f90')
b = tk.Label(root, text='BBB', background='#09c')
c = tk.Label(root, text='CCC', background='#fc0')
d = tk.Label(root, text='DDD', background='#f9c')
e = tk.Label(root, text='EEE', background='#aaa')
a.pack(fill='x', padx=20)
b.pack(ipadx=20)
c.pack(fill='x', ipady=20)
d.pack(ipady=20)
e.pack()
root.mainloop()
side 參數
pack() 的 side 參數會設定該元件放置在 left 左邊、right 右邊、top 上面、bottom 下面,執行的順序決定放置的順序。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
a = tk.Label(root, text='AAA', background='#f90')
b = tk.Label(root, text='BBB', background='#09c')
c = tk.Label(root, text='CCC', background='#fc0')
d = tk.Label(root, text='DDD', background='#f9c')
e = tk.Label(root, text='EEE', background='#aaa')
a.pack(side='left')
b.pack(side='left')
c.pack(side='top')
d.pack(side='bottom')
e.pack(side='right')
root.mainloop()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~