Python之tkinter 窗口控件配置管理員之place方法

簡介

在設計GUI程序時,可以使用三種方法包裝和定位各組件在容器窗口內的位置
這三種方法又稱窗口控件配置管理員(Widget Layout Manager)

  • pack 方法
  • grid 方法
  • place 方法

place 方法

這是使用直接指定方式將控件放在容器(窗口)中的方法

語法格式:

place(options,...)

它的參數有height/widthrelx/relyx/yrelheight/relwidthbordermodeanchor

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方法可以很精準的設置控件的位置,但是我們一般不使用這個方法,儘量使用packgrid方法

因爲如果我們用place方法,同時有新增或者減少組件時,又必須要重新設置組件的位置,這樣會很不方便

謝謝觀看,筆者會持續更新,如有錯誤或者建議,請私信我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章