一、place簡介
在tkinter中,用於管理所有組件在窗口界面佈局的有三種方法:pack、grid、place。
- pack 按添加順序排列組件
- grid 按行列形式排列組件
- place 能夠實現自定義排列組件
前面總結 pack 佈局管理器、grid 佈局管理器,最後再來了解了解 place 佈局管理器。
一般情況下不太常用 place ,雖然它能夠實現自定義排列組件,但是使用起來要複雜一些,需要手動設置x、y座標。
如果是整個頁面佈局大規模使用 place,那絕對讓人崩潰級別的。
但在一些特殊情況,使用 place 還是非常好用滴!
二、運用實例
——
1. 絕對座標和相對座標
在 place 中,主要通過兩種方式來確定各個組件的位置,一種是絕對座標(x,y),另一種是相對座標(relx,rely)。
import tkinter as tk
root = tk.Tk()
lb = tk.Label(root, text='逆旅鴨')
# 使用絕對座標將Label放置到(50,50)位置上
lb.place(x=50, y=50, anchor='center')
bt = tk.Button(root, text='確定')
# 使用相對座標將Label放置到父組件中間的位置上
bt.place(relx=0.5, rely=0.5, anchor='center')
root.mainloop()
運行程序,我們看看它在窗口的排列。
還得重點講講這個相對座標,它有一個好處,看看下面的代碼。
import tkinter as tk
root = tk.Tk()
# relheight表示相對父組件的高度,relwidth表示相對父組件的寬度
tk.Label(root, bg="red").place(relx=0.5, rely=0.5, relheight=0.75, relwidth=0.75, anchor='center')
tk.Label(root, bg="yellow").place(relx=0.5, rely=0.5, relheight=0.5, relwidth=0.5, anchor='center')
tk.Label(root, bg="blue").place(relx=0.5, rely=0.5, relheight=0.25, relwidth=0.25, anchor='center')
root.mainloop()
運行程序,我們不管怎麼拖動窗口的大小,其中的各個組件相對於父組件都是保持着同樣比例的位置和寬高。
——
2. 同時使用兩種座標
如果我們針對一個組件同時使用絕對座標和相對座標,那這個組件的排列會是怎樣的?
import tkinter as tk
root = tk.Tk()
root.geometry('400x400')
lb1 = tk.Label(root, text='你好鴨', fg='white', bg='green')
lb2 = tk.Label(root, text='我是逆旅鴨', fg='white', bg='red')
# 先設置相對座標爲(0.5,0.5),再使用(-100,-100)將座標作偏移(-100,-100)
lb1.place(relx=0.5, rely=0.5, anchor='center', x=-100, y=-100)
# 先設置相對座標爲(0.5,0.5),再使用(50,50)將座標作偏移(50,50)
lb2.place(relx=0.5, rely=0.5, anchor='center', x=50, y=50)
root.mainloop()
運行程序來看一下。
只需要記住,同時使用相對和絕對座標時,相對座標優先操作,然後是在這個相對座標的基礎上進行偏移。
——
3. 組件重疊覆蓋
利用 place,我們可以實現組件與組件之間的重疊覆蓋功能。
import tkinter as tk
root = tk.Tk()
tk.Label(root, text='用戶名').grid(row=0, column=0, padx=10, pady=5, sticky='w')
tk.Label(root, text='密碼').grid(row=1, column=0, padx=10, pady=5, sticky='w')
tk.Entry(root).grid(row=0, column=1, padx=10, pady=5)
tk.Entry(root, show='*').grid(row=1, column=1, padx=10, pady=5)
photo = tk.PhotoImage(file='頭像1.png')
tk.Label(root, image=photo).grid(row=0, column=2, rowspan=2, padx=5, pady=5)
tk.Button(text='登錄').place(relx=0.8, rely=0.5)
root.mainloop()
運行程序,看我們的“登錄”按鈕就和圖片重合在一起了。
三、參數方法
——
1. 參數彙總
下面列出佈局管理器 place 所涉及的參數以及用法。
——
2. 方法彙總
place_configure(**options)
- 跟 place() 一樣
place_forget()
- 將組件從屏幕中“刪除”
- 並沒有銷燬該組件,只是看不到了
- 可以通過 place 或其他佈局管理器顯示已“刪除”的組件
place_info()
- 以字典的形式返回當前 place 的選項
place_slaves()
- 以列表的形式返回該組件的所有子組件
- 該方法僅適用於父組件
slaves()
- 跟 place_slaves() 一樣