Place 位置版面佈局
除了 place() 和 grid(),tkinter 也有提供 place() 的佈局方法,讓使用者可以定義「絕對位置」和「相對位置」的座標進行元件定位,這篇教學會介紹如何使用 place() 方法,並使用位置的方式進行元件的排版佈局。
快速導覽:
因為 Google Colab 不支援 tkinter,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda )。
使用 place()
使用 tkinter 相關方法建立元件後,除了使用 pack() 方法 ( 參考 Pack 基本版面佈局 ) 和 grid() 方法 ( 參考 Grid 格狀版面佈局 ) 進行放置外,也可以使用 place() 方法將元件擺放在指定的位置,不受基本放置或格狀版面影響,以下方的例子而言,有四個 Label 都指向 root ( 主視窗元件 ),使用 place() 將其放在指定的座標上。
注意,使用 place() 方法只能放在主視窗 root 裡,不能放在其他元件 ( 如 Frame 中 )。
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='#0c9')
a.place(x=0, y=0) # 放在 (0,0)
b.place(x=50, y=50) # 放在 (50,50)
c.place(x=100, y=100) # 放在 (100,100)
d.place(x=150, y=150) # 放在 (150,150)
root.mainloop()
x、y 參數
place() 的 x 和 y 參數表示放置的元件在主視窗的絕對位置,視窗左上角為 (0,0),往右為正,往下為正,下方的程式碼執行後,會有四個 Label 放在指定的位置上。
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='#0c9')
a.place(x=0, y=0) # 放在 (0,0)
b.place(x=50, y=50) # 放在 (50,50)
c.place(x=100, y=100) # 放在 (100,100)
d.place(x=150, y=150) # 放在 (150,150)
root.mainloop()
relx、rely 參數
place() 的 relx 和 rely 參數表示「比例」,也就是元件左上角座標在視窗中,按照比例算出來的座標,數值範圍 0~1,例如視窗寬度如果是 100,relx 設定 0.5,x 座標就會在 100x0.5=50 的位置。
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='#0c9')
a.place(relx=0.1, rely=0.1)
b.place(relx=0.3, rely=0.3)
c.place(relx=0.5, rely=0.5)
d.place(relx=0.7, rely=0.7)
root.mainloop()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~