【tkinter佈局管理】place:隨心所欲,自定義排列

在這裏插入圖片描述


一、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() 一樣
    在這裏插入圖片描述在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章