Python-Tkinter幾何佈局管理

所有的Tkinter組件都包含專用的幾何管理方法,這些方法是用來組織和管理整個父配件區中子配件的佈局的。Tkinter提供了截然不同的三種幾何管理類:pack、grid和place。

 
pack()

       pack幾何管理採用塊的方式組織配件,在快速生成界面設計中廣泛採用,若干組件簡單的佈局,採用pack的代碼量最少。pack幾何管理程序根據組件創建生成的順序將組件添加到父組件中去。通過設置相同的錨點(anchor)可以將一組配件緊挨一個地方放置,如果不指定任何選項,默認在父窗體中自頂向下添加組件。

 
       使用pack()佈局的通用公式爲:

              WidgetObject.pack(option, …)

 

       pack方法提供了下列option選項,選項可以直接賦值或以字典變量加以修改:

名稱

描述

取值範圍

expand

當值爲“yes”時,side選項無效。組件顯示在父配件中心位置;若fill選項爲”both”,則填充父組件的剩餘空間。

“yes”, 自然數, “no”, 0

 (默認值爲“no”或0)

fill

填充x(y)方向上的空間,當屬性side=”top”或”bottom”時,填充x方向;當屬性side=”left”或”right”時,填充”y”方向;當expand選項爲”yes”時,填充父組件的剩餘空間。

“x”, “y”, “both”

(默認值爲待選)

ipadx, ipady

組件內部在x(y)方向上填充的空間大小,默認單位爲像素,可選單位爲c(釐米)、m(毫米)、

i(英寸)、p(打印機的點,即1/27英寸),用法爲在值後加以上一個後綴既可。

非負浮點數

(默認值爲0.0)

padx, pady

組件外部在x(y)方向上填充的空間大小,默認單位爲像素,可選單位爲c(釐米)、m(毫米)、

i(英寸)、p(打印機的點,即1/27英寸),用法爲在值後加以上一個後綴既可。

非負浮點數

(默認值爲0.0)

side

定義停靠在父組件的哪一邊上。

“top”, “bottom”, “left”, “right”

(默認爲”top”)

before

將本組件於所選組建對象之前pack,類似於先創建本組件再創建選定組件。

已經pack後的組件對象

after

將本組件於所選組建對象之後pack,類似於先創建選定組件再本組件。

已經pack後的組件對象

in_

將本組件作爲所選組建對象的子組件,類似於指定本組件的master爲選定組件。

已經pack後的組件對象

anchor

對齊方式,左對齊”w”,右對齊”e”,頂對齊”n”,

底對齊”s”

“n”, “s”, “w”, “e”, “nw”, “sw”, “se”, “ne”, “center”

(默認爲” center”)

 

注:以上選項中可以看出expand、fill和side是相互影響的。

 

典型例子:(默認引用爲from Tkinter import *)

       單組件填充滿父組件:

              text = Text(root, …)

text.pack(expand=YES, fill=”both”)           Tkinter模塊提供了一系列大寫值,其等價於字符型小寫值,即Tkinter,YES  = =  “yes”

      

多組件佈局(從左往右):                      默認佈局是從上往下。

              btn = Button(root, …)

              btn.pack(side=LEFT, padx=<chmetcnv unitname="C" sourcevalue="4" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on"></chmetcnv>4c)                x軸左右拓展4釐米。

              Text(root, …).pack(side=LEFT)

 
       pack類提供了下列函數:

函數名

描述

slaves()

以列表方式返回本組件的所有子組件對象。

propagate(boolean)

設置爲True表示父組件的幾何大小由子組件決定(默認值),反之則無關。

info()

返回pack提供的選項所對應得值。

forget()

Unpack組件,將組件隱藏並且忽略原有設置,對象依舊存在,可以用pack(option, …),將其顯示。

location(x, y)

x, y爲以像素爲單位的點,函數返回此點是否在單元格中,在哪個單元格中。返回單元格行列座標,(-1, -1)表示不在其中。

size()

返回組件所包含的單元格,揭示組件大小。

 

grid()

grid幾何管理採用類似表格的結構組織配件,使用起來非常靈活,用其設計對話框和帶有滾動條的窗體效果最好。grid採 用行列確定位置,行列交匯處爲一個單元格。每一列中,列寬由這一列中最寬的單元格確定。每一行中,行高由這一行中最高的單元格決定。組件並不是充滿整個單 元格的,你可以指定單元格中剩餘空間的使用。你可以空出這些空間,也可以在水平或豎直或兩個方向上填滿這些空間。你可以連接若干個單元格爲一個更大空間, 這一操作被稱作跨越。創建的單元格必須相臨。


       使用grid()佈局的通用公式爲:

              WidgetObject.grid(option, …)

 
       grid方法提供了下列option選項,選項可以直接賦值或以字典變量加以修改:

名稱

描述

取值範圍

column

組件所置單元格的列號。

自然數(起始默認值爲0,而後累加)

columnspan

從組件所置單元格算起在列方向上的跨度。

自然數(起始默認值爲0)

ipadx, ipady

組件內部在x(y)方向上填充的空間大小,默認單位爲像素,可選單位爲c(釐米)、m(毫米)、

i(英寸)、p(打印機的點,即1/27英寸),用法爲在值後加以上一個後綴既可。

非負浮點數

(默認值爲0.0)

padx, pady

組件外部在x(y)方向上填充的空間大小,默認單位爲像素,可選單位爲c(釐米)、m(毫米)、

i(英寸)、p(打印機的點,即1/27英寸),用法爲在值後加以上一個後綴既可。

非負浮點數

(默認值爲0.0)

row

組件所置單元格的行號。

自然數(起始默認值爲0,而後累加)

rowspan

從組件所置單元格算起在行方向上的跨度。

自然數(起始默認值爲0)

in_

將本組件作爲所選組建對象的子組件,類似於指定本組件的master爲選定組件。

已經pack後的組件對象

sticky

組件緊靠所在單元格的某一邊角。

“n”, “s”, “w”, “e”, “nw”, “sw”, “se”, “ne”, “center”

(默認爲” center”)

 

典型例子:(默認引用爲from Tkinter import *)

       單組件填充滿父組件:

              text = Text(root, …)

root.rowconfigure(0, weight=1)

root.columnconfigure (0, weight=1)        可以看出,用grid填充不如pack方便。

      

多組件佈局(滾動條):                        效果肯定是3種佈局方式中最好的。

              text = Text(root, …)

text.grid()

# 縱向

              sb = Scrollbar(root, …)

        sb.grid(row=0, column=1, sticky='ns')

        text.configure(yscrollcommand=sb.set)

        sb.configure(command=text.yview)

              # 橫向

        sb = Scrollbar(root, orient='horizontal', …)

        sb.grid(row=1, column=0, sticky='ew')

        text.configure(xscrollcommand=sb.set)

        sb.configure(command=text.xview)

 
       grid類提供了下列函數:

函數名

描述

slaves()

以列表方式返回本組件的所有子組件對象。

propagate(boolean)

設置爲True表示父組件的幾何大小由子組件決定(默認值),反之則無關。

info()

返回pack提供的選項所對應得值。

forget()

Unpack組件,將組件隱藏並且忽略原有設置,對象依舊存在,可以用pack(option, …),將其顯示。

grid_remove ()

 

http://purpen.iteye.com/blog/74830

 

發佈了13 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章