2022年11月17日 星期四

Python Tkinter 配置管理員pack()、grid() 以及 place()

視窗控件配置管理員 Widget Layout Manager

(Tkinter布局管理器)

Tkinter 提供了三種常用的佈局管理器,分別是 pack()grid() 以及 place(),如下表所示:

方法

說明

pack()

按照控制項的添加順序其進行排列,遺憾的是此方法靈活性較差

grid()

以行和列(網格)形式對控制項進行排列,此種方法使用起來較為靈活

place()

可以指定元件大小以及擺放位置,三個方法中最為靈活的佈局方法



pack()

pack() 是一種較為簡單的佈局方法,在不使用任何參數的情況下,它會將控制項以添加時的先後順序,自上而下,一行一行的進行排列,並且預設居中顯示。pack() 方法的常用參數如下所示:

屬性

說明

anchor

元件在視窗中的對齊方式,有 9 個方位參數值,比如"n"/"w"/"s"/"e"/"ne",以及 "center" 等(這裡的 e w s n分別代表,東西南北)

expand

是否可擴展視窗,參數值為 True(擴展)或者 False(不擴展),默認為 False,若設置為 True,則控制項的位置始終位於視窗的中央位置

fill

參數值為 X/Y/BOTH/NONE,表示允許控制項在水準/垂直/同時在兩個方向上進行拉伸,比如當 fill = X 時,控制項會占滿水準方向上的所有剩餘的空間。

ipadx,ipady

需要與 fill 參數值共同使用,表示元件與內容和元件邊框的距離(內邊距),比如文本內容和元件邊框的距離,單位為圖元(p),或者釐米(c)、英寸(i)

padx,pady

用於控制元件之間的上下、左右的距離(外邊距),單位為圖元(p),或者釐米(c)、英寸(i)

side

元件放置在視窗的哪個位置上,參數值 'top','bottom','left','right'。注意,單詞小寫時需要使用字串格式,若為大寫單詞則不必使用字串格式

 

grid() 函數的常用參數如下所示:
grid()
函數是一種基於網格式的佈局管理方法,相當於把視窗看成了一張由行和列組成的表格。當使用該 grid 函數進行佈局的時,表格內的每個儲存格都可以放置一個控制項。,從而實現對介面的佈局管理。

注意:這裡的所說的“表格”是虛擬出來,目的是便於大家理解,其實表單並不會因為使用了 gird() 函數,而增加一個表格。

 

屬性

說明

column

控制項位於表格中的第幾列,表單最左邊的為起始列,默認為第 0

columnsapn

控制項實例所跨的列數,默認為 1 列,通過該參數可以合併一行中多個領近儲存格。

ipadx,ipady

用於控制內邊距,在儲存格內部,左右、上下方向上填充指定大小的空間。

padx,pady

用於控制外邊距,在單元格外部,左右、上下方向上填充指定大小的空間。

row

控制項位於表格中的第幾行,表單最上面為起始行,默認為第 0

rowspan

控制項實例所跨的行數,默認為 1 行,通過該參數可以合併一列中多個領近儲存格。

sticky

該屬性用來設置控制項位於儲存格那個方位上,參數值和 anchor 相同,若不設置該參數則控制項在儲存格內居中

 

 

place()

與前兩種佈局方法相比,採用 place() 方法進行佈局管理要更加精細化,通過 place() 佈局管理器可以直接指定控制項在表單內的絕對位置,或者相對於其他控制項定位的相對位置。

下面對 place 佈局管理器的常用屬性做相關介紹:

屬性

說明

anchor

定義控制項在表單內的方位,參數值N/NE/E/SE/S/SW/W/NW CENTER,預設值是 NW

bordermode

定義控制項的座標是否要考慮邊界的寬度,參數值為 OUTSIDE(排除邊界) 或 INSIDE(包含邊界),預設值 INSIDE

xy

定義控制項在根表單中水準和垂直方向上的起始絕對位置

relxrely

1. 定義控制項相對於根視窗(或其他控制項)在水準和垂直方向上的相對位置(即位移比例),取值範圍再 0.0~1.0 之間
2.
可設置 in_ 參數項,相對於某個其他控制項的位置

heightwidth

控制項自身的高度和寬度(單位為圖元)

relheightrelwidth

控制項高度和寬度相對於根表單高度和寬度的比例,取值也在 0.0~1.0 之間

沒有留言:

張貼留言

WOKWI LED + MQTT Node-Red SQLite

WOKWI LED + MQTT Node-Red SQLite const char *mqtt_broker = "broker.mqtt-dashboard.com" ; const char *topic1 = "alex9ufo/e...