簡介
在設計GUI程序時,可以使用三種方法包裝和定位各組件在容器
或窗口
內的位置
這三種方法又稱窗口控件配置管理員
(Widget Layout Manager)
pack 方法
grid 方法
place 方法
place 方法
這是使用直接指定方式將控件放在容器(窗口)中的方法
語法格式:
place(options,...)
它的參數有height/width
、 relx/rely
、x/y
、 relheight/relwidth
、 bordermode
、 anchor
x/y 參數
place()方法類的x和y參數可直接設定窗口組件的左上方位置
,單位是像素
窗口顯示器的左上角是(x=0, y=0),X是向右遞增,y是向下遞增。
同時使用這種方法時,窗口將不會自動重設大小,而是使用默認的大小顯示
例子
:
import tkinter
# 創建主窗口
root = tkinter.Tk()
lab1 = tkinter.Label(root, text="One",
bg="lightgreen",
width=8)
lab2 = tkinter.Label(root, text="Two",
bg="lightblue",
width=8)
lab3 = tkinter.Label(root, text="Three",
bg="lightyellow",
width=8)
lab1.place(x=0, y=0)
lab2.place(x=20, y=40)
lab3.place(x=50, y=80)
root.mainloop()
運行結果:
這個就是控件的左上角
距離外軸跟x軸的距離
但是我們如果增加距離,窗口就不會因爲控件變大而變大
例子
:
import tkinter
# 創建主窗口
root = tkinter.Tk()
lab1 = tkinter.Label(root, text="One",
bg="lightgreen",
width=8)
lab2 = tkinter.Label(root, text="Two",
bg="lightblue",
width=8)
lab3 = tkinter.Label(root, text="Three",
bg="lightyellow",
width=8)
lab1.place(x=0, y=0)
lab2.place(x=20, y=40)
lab3.place(x=170, y=80)
root.mainloop()
運行結果:
width/height 參數
有時候在設計窗口,應用程序時,所預留的空間有限,如果想要將圖片插入窗口內,卻擔心圖片太大,可以在插入圖片的同時設定圖片的大小,這樣就很方便了。
這個時候我們就可以使用width/height
參數了,這兩個參數可以直接設定控件的實體大小
例子
:
import tkinter
# 創建主窗口
root = tkinter.Tk()
root.geometry("300x200")
img = tkinter.PhotoImage(file="1.png")
lab1 = tkinter.Label(root, image=img)
lab1.place(x=20, y=30, width=200, height=150)
root.mainloop()
運行結果:
當然,如果設置的大小太小了,也會導致圖片變形擠壓的
例子
:
lab1.place(x=20, y=30, width=100, height=60)
運行結果:
可以對比一下,很清楚,已經變形了
relx/rely
參數與relwidth/relheight
參數
relx/rely
參數可以設置相對
於父容器(或者父窗口)的位置relwidth/relheight
參數可以設置相對
於父容器(或者父窗口)的大小
這個相對位置和相對大小是相對於父容器而言,其值爲0.0~1.0
import tkinter
# 創建主窗口
root = tkinter.Tk()
root.geometry("150x120")
img = tkinter.PhotoImage(file="1.png")
lab1 = tkinter.Label(root, image=img)
lab1.place(x=20, y=30, relwidth=0.8, relheight=0.8)
root.mainloop()
運行結果:
如果達到了圖片的原始大小,無論怎麼拖拽都不會增大了
我們再改善一下
例子
:
lab1.place(relwidth=1, relheight=1)
這樣或許看的更加直觀一點
運行結果:
下面我們來看relx/rely
例子:
import tkinter
# 創建主窗口
root = tkinter.Tk()
img = tkinter.PhotoImage(file="1.png")
lab1 = tkinter.Label(root, image=img)
lab1.place(relx=0.5, rely=0.5)
root.mainloop()
運行結果:
相對於窗口的大小,來定位
我們這裏是0.5
,所以位置就是相對於窗口的0.5來算的
總結:
我們在做GUI設計時,雖然使用place
方法可以很精準的設置控件的位置,但是我們一般不使用這個方法,儘量使用pack
和grid
方法
因爲如果我們用place
方法,同時有新增或者減少組件時,又必須要重新設置組件的位置,這樣會很不方便
謝謝觀看,筆者會持續更新,如有錯誤或者建議,請私信我