所有的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 () |