Tkinter 控件詳細介紹

Tkinter支持15個核心的窗口部件,這個15個核心窗口部件類列表如下:

窗口部件及說明:

Button:
一個簡單的按鈕,用來執行一個命令或別的操作。

Canvas:
組織圖形。這個部件可以用來繪製圖表和圖,創建圖形編輯器,實現定製窗口部件。

Checkbutton:
代表一個變量,它有兩個不同的值。點擊這個按鈕將會在這兩個值間切換。

Entry:
文本輸入域。

Frame:
一個容器窗口部件。幀可以有邊框和背景,當創建一個應用程序或dialog(對話)版面時,幀被用來組織其它的窗口部件。

Label:
顯示一個文本或圖象。

Listbox:
顯示供選方案的一個列表。listbox能夠被配置來得到radiobutton或checklist的行爲。

Menu:
菜單條。用來實現下拉和彈出式菜單。

Menubutton:
菜單按鈕。用來實現下拉式菜單。

Message:
顯示一文本。類似label窗口部件,但是能夠自動地調整文本到給定的寬度或比率。

Radiobutton:
代表一個變量,它可以有多個值中的一個。點擊它將爲這個變量設置值,並且清除與這同一變量相關的其它radiobutton。

Scale:
允許你通過滑塊來設置一數字值。

Scrollbar:
爲配合使用canvas, entry, listbox, and text窗口部件的標準滾動條。

Text:
格式化文本顯示。允許你用不同的樣式和屬性來顯示和編輯文本。同時支持內嵌圖象和窗口。

Toplevel:
一個容器窗口部件,作爲一個單獨的、最上面的窗口顯示。

注意在Tkinter中窗口部件類沒有分級;所有的窗口部件類在樹中都是兄弟。

所有這些窗口部件提供了Misc和幾何管理方法、配置管理方法和部件自己定義的另外的方法。此外,Toplevel類也提供窗口管理接口。這意味一個典型的窗口部件類提供了大約150種方法。

Button窗口部件

Button(按鈕)窗口部件是一個標準的Tkinter窗口部件,用來實現各種按鈕。按鈕能夠包含文本或圖象,並且你能夠將按鈕與一個Python函數或方法相關聯。當這個按鈕被按下時,Tkinter自動調用相關聯的函數或方法。

按鈕僅能顯示一種字體,但是這個文本可以跨行。另外,這個文本中的一個字母可以有下劃線,例如標明一個快捷鍵。默認情況,Tab鍵用於將焦點移動到一個按鈕部件。

一、那麼什麼時候用按鈕部件呢?

簡而言之,按鈕部件用來讓用戶說“馬上給我執行這個任務”,通常我們用顯示在按鈕上的文本或圖象來提示。按鈕通常用在工具條中或應用程序窗口中,並且用來接收或忽略輸入在對話框中的數據。

關於按鈕和輸入的數據的配合,可以參看Checkbutton和Radiobutton部件。

二、樣式

普通的按鈕很容易被創建,僅僅指定按鈕的內容(文本、位圖、圖象)和一個當按鈕被按下時的回調函數即可:
b = Button(master, text="OK", command=self.ok)

沒有回調函數的按鈕是沒有用的,當你按下這個按鈕時它什麼也不做。你可能在開發一個應用程序的時候想實現這種按鈕,比如爲了不干擾你的beta版的測試者:
b = Button(master, text="Help", state=DISABLED)

如 果你沒有指定尺寸,按鈕的大小將正好能夠容納它的內容。你可以用padx和pady選項來增加內容與按鈕邊框的間距。你也可以用height和width 選項來顯式地設置按鈕的尺寸。如果你在按鈕中顯示文本,那麼這些選項將以文本的單位爲定義按鈕的尺寸。如果你替而代之顯示圖象,那麼按鈕的尺寸將是象素 (或其它的屏幕單位)。你實際上甚至能夠用象素單位來定義文本按鈕的尺寸,但這可能帶來意外的結果。下面是指定尺寸的一段例子代碼:
f = Frame(master, height=32, width=32)
f.pack_propagate(0) # don't shrink
b = Button(f, text="Sure!")
b.pack(fill=BOTH, expand=1)


按鈕能夠顯示多行文本(但只能用一種字體)。 你可以使用多行或wraplength選項來使按鈕自己調整文本。當調整文本時,使用anchor,justify,也可加上padx選項來得到你所希望的格式。一個例子如下:
b = Button(master, text=longtext, anchor=W, justify=LEFT, padx=2)

爲了使一個普通的按鈕看起來像凹入的,例如你想去實現某種類型的工具框,你可簡單地將relief的值從"RAISED"改變爲"SUNKEN:
b.config(relief=SUNKEN)

你也可能想改變背景。注意:一個大概更好的解決方案是使用一個Checkbutton或Radiobutton其indicatoron選項的值設置爲false:
b = Checkbutton(master, image=bold, variable=var, indicatoron=0)

三、方法

Button窗口部件支持標準的Tkinter窗口部件接口,加上下面的方法:

flash():頻繁重畫按鈕,使其在活動和普通樣式下切換。

invoke() :調用與按鈕相關聯的命令。

下面的方法與你實現自己的按鈕綁定有關:

tkButtonDown(), tkButtonEnter(), tkButtonInvoke(), tkButtonLeave(), tkButtonUp() 
這些方法可以用在定製事件綁定中,所有這些方法接收0個或多個形參。

四、選項

Button窗口部件支持下面的選項:

activebackground, activeforeground
類型:顏色;
說明:當按鈕被激活時所使用的顏色。

anchor
類型:常量;
說明:控制按鈕上內容的位置。使用N, NE, E, SE, S, SW, W, NW, or CENTER這些值之一。默認值是CENTER。

background (bg), foreground (fg)
類型:顏色;
說明:按鈕的顏色。默認值與特定平臺相關。

bitmap
類型:位圖;
說 明:顯示在窗口部件中的位圖。如果image選項被指定了,則這個選項被忽略。下面的位圖在所有平臺上都有 效:error, gray75, gray50, gray25, gray12, hourglass, info, questhead, question, 和 warning.
Tkinter類之窗口部件類
這 後面附加的位圖僅在Macintosh上有 效:document, stationery, edition, application, accessory, folder, pfolder, trash, floppy, ramdisk, cdrom, preferences, querydoc, stop, note, 和 caution.

你也可以從一個XBM文件中裝載位圖。只需要在XBM文件名前加一個前綴@,例如"@sample.xbm"。

borderwidth (bd)
類型:整數;
說明:按鈕邊框的寬度。默認值與特定平臺相關。但通常是1或2象素。

command
類型:回調;
說明:當按鈕被按下時所調用的一個函數或方法。所回調的可以是一個函數、方法或別的可調用的Python對象。

cursor
類型:光標;
說明:當鼠標移動到按鈕上時所顯示的光標。

default
類型:常量;
說明:如果設置了,則按鈕爲默認按鈕。注意這個語法在Tk 8.0b2中已改變。

disabledforeground
類型:顏色;
說明:當按鈕無效時的顏色。

font
類型:字體;
說明:按鈕所使用的字體。按鈕只能包含一種字體的文本。

highlightbackground, highlightcolor
類型:顏色;
說明:控制焦點所在的高亮邊框的顏色。當窗口部件獲得焦點的時候,邊框爲highlightcolor所指定的顏色。否則邊框爲highlightbackground所指定的顏色。默認值由系統所定。

highlightthickness
類型:距離;
說明:控制焦點所在的高亮邊框的寬度。默認值通常是1或2象素。

image
類型:圖象;
說明:在部件中顯示的圖象。如果指定,則text和bitmap選項將被忽略。

justify
類型:常量;
說明:定義多行文本如何對齊。可取值有:LEFT, RIGHT, 或 CENTER。

padx, pady
類型:距離;
說明:指定文本或圖象與按鈕邊框的間距。

relief
類型:常量;
說明:邊框的裝飾。通常按鈕按下時是凹陷的,否則凸起。另外的可能取值有GROOVE, RIDGE, 和 FLAT。

state
類型:常量;
說明:按鈕的狀態:NORMAL, ACTIVE 或 DISABLED。默認值爲NORMAL。

takefocus
類型:標誌;
說明:表明用戶可以Tab鍵來將焦點移到這個按鈕上。默認值是一個空字符串,意思是如果按鈕有按鍵綁定的話,它可以通過所綁定的按鍵來獲得焦點。

text
類型:字符串;
說明:顯示在按鈕中的文本。文本可以是多行。如果bitmaps或image選項被使用,則text選項被忽略。

textvariable
類型:變量;
說明:與按鈕相關的Tk變量(通常是一個字符串變量)。如果這個變量的值改變,那麼按鈕上的文本相應更新。

underline
類型:整數;
說明:在文本標籤中哪個字符加下劃線。默認值爲-1,意思是沒有字符加下劃線。

width, height
類型:距離;
說明:按鈕的尺寸。如果按鈕顯示文本,尺寸使用文本的單位。如果按鈕顯示圖象,尺寸以象素爲單位(或屏幕的單位)。如果尺寸沒指定,它將根據按鈕的內容來計算。

wraplength
類型:距離;
說明:確定一個按鈕的文本何時調整爲多行。它以屏幕的單位爲單位。默認不調整。

Mixins

Tkinter模塊提供了相應於Tk中的各種窗口部件類型的類和一定數量的mixin和別的幫助類(mixin是一個類,被設計來使用多態繼承與其它的類結合)。當你使用Tkinter時,你不將直接訪問mixin類。

一、實施mixins

通過root窗口和窗口部件類,Misc類被用作mixin。它提供了大量的Tk和窗口相關服務,這些服務對所有Tkinter核心窗口部件者有效。這些通過委託完成;窗口部件僅僅直接請求適當的內部對象。

Wm類通過root窗口和頂級窗口部件類被用作mixin。通過委託它提供了窗口管理服務。

使用委託像這樣簡化你的應用程序代碼:一旦你有一窗口部件,你能夠使用這個窗口部件的實例的方法訪問Tkinter的所有部份。

二、Geometry(幾何學)與mixins

Grid,Pack,Place這些類通過窗口部件類被用作mixins。通過委託,它們也提供了訪問不同幾何管理的支持。
下面是Geometry Mixins的列表及說明:
管理器及說明:

Grid:grid幾何管理器允許你通過在一個二維網格中組織窗口部件來創建一個類似表的版面。
Pack:pack幾何管理器通過在一個幀中把窗口部件包裝到一個父部件中來創建一個版面。爲了對窗口部件使用這個幾何管理器,我們在這個窗口部件上使用pack方法來集成。
Place:place幾何管理器讓你顯式將一個窗口部件放到給定的位置。要使用這個幾何管理器,需使用place方法。

三、窗口部件配置管理
Widget類使用 geometry mixins來混合Misc類,並通過cget和configure方法來增加配置管理,也可以通過一個局部的字典接口。 

窗口部件的配置

要配置一個窗口部件的外觀,你用選項比使用方法調用好。典型的選項包括text、color、size、command等等。對於處理選項,所有的核心窗口部件執行同樣的配置接口:

配置接口

widgetclass(master, option=value, ...) => widget 
說明:
創 建這個窗口部件的一個實例,這個實例作爲給定的master的孩子,並且使用給定的選項。所有的選項都有默認值,因此在簡單的情況下,你僅需要指定這個 master。如果你想的話,你也可以不指定master;Tkinter這時會使用最近創建的root窗口作爲master。注意這個name選項僅能 在窗口部件被創建時設置。

cget(option) => string 
說明:
返回一個選項的當前值。選項的名字和返回值都是字符串。要得到name選項,使用str(widget)代替。

configure(option=value, ...), config(option=value, ...) 
說明:
設置一個或多個選項(作爲關鍵字參數給定)。
注意一些選項的名字與Python中的保留字相同(class,from等)。要使用這些作爲關鍵字參數,僅需要在這些選項名後添加一下劃線(class_,from_)。注意你不能用此方法來設置name選項;name選項只能在窗口部件被創建時設置。

爲了方便起見,窗口部件也實現一個局部的字典接口。 __setitem__ 方法映射configure,而__getitem__方法映射cget。你可以使用下面的語法來設置和查詢選項:
value = widget[option]
widget[option] = value
注意每個賦值都導致一個對Tk的調用。如果你希望去改變多個選項,單獨地調用(config或configure)去改變它們是一個好的主意。

這下面的字典方法也適用於窗口部件:
keys() => list 
說明:
返回窗口部件中所有可以被設置的選項的一個列表。name選項不包括在這個列表中(它不能通過字典接口被查詢或修改)。

向後兼容性

關鍵字參數在Python1.3時被引入。之前,使用原始的Python字典將選項傳遞給窗口構造器和configure方法。原代碼類似如下:
self.button = Button(frame, {"text": "QUIT", "fg": "red", "command": frame.quit})
self.button.pack({"side": LEFT})


關鍵字參數語法更優雅和少容易發生錯誤。但是爲了與存在的代碼兼容,Tkinter仍支持老的語法。在新的程序中你不應再用老的語法,即使是在某些情況下是很有吸引力的。例如,如果你創建了一個定製的窗口部件,它需要沿它的父類傳遞配置選項,你的代碼可能如下:
def __init__(self, master, **kw):
    Canvas.__init__(self, master, kw) 
kw 是一個字典
上面的代碼在當前版本的Tkinter下工作的很好,但是它在將來的版本下可能不工作。一個通常的辦法是使用apply函數:
def __init__(self, master, **kw):
    apply(Canvas.__init__, (self, master), kw)

這個apply函數使用了一個函數(一個未約束的方法),一個帶參數的元組(它必須包括self,因爲我們調用一個未約束的方法),一個可選的,提供了關鍵字參數的字典。

窗口部件的樣式之顏色

所有的Tkinter標準窗口部件提供了一套樣式設置選項,這讓你可以去修改這些窗口部件的外觀如顏色、字體和其它的可視外觀。

顏色

大部份窗口部件都允許你指定窗口部件和文本的顏色,這可以使用background和foreground選項。要指定顏色,你可以使用顏色名,也可以使用紅、綠、藍顏色組合。

1、顏色名
Tkinter 包括一個顏色數據庫,它將顏色名映射到相應的RGB值。這個數據庫包括了通常的名稱如Red, Green, Blue, Yellow, 和 LightBlue,也可使用外來的如Moccasin,PeachPuff等等。在X window系統上,顏色名由X server定義。你能夠找到 一個名爲xrgb.txt的文件,它包含了一個由顏色名和相應RGB值組成的列表。在Windows和Macintosh系統上,顏色名錶內建於Tk中。

在Windows下,你可以使用Windows系統顏色(用戶可以通過控制面板來改變這些顏色):
SystemActiveBorder, SystemActiveCaption, SystemAppWorkspace, SystemBackground, 
SystemButtonFace, SystemButtonHighlight, SystemButtonShadow, SystemButtonText, 
SystemCaptionText, SystemDisabledText, SystemHighlight, SystemHighlightText, 
SystemInactiveBorder, SystemInactiveCaption, SystemInactiveCaptionText, SystemMenu, 
SystemMenuText, SystemScrollbar, SystemWindow, SystemWindowFrame, SystemWindowText。


在Macintosh上,下面的系統顏色是有效的:
SystemButtonFace, SystemButtonFrame, SystemButtonText, SystemHighlight, SystemHighlightText, SystemMenu, SystemMenuActive, SystemMenuActiveText, SystemMenuDisabled, SystemMenuText, SystemWindowBody。

顏色名是大小寫不敏感的。許多顏色名詞與詞之間有無格都有效。例如"lightblue", "light blue", 和 
"Light Blue"都是同一顏色。

2、RGB格式

如果你需要顯式地指定顏色名,你可以使用如下格式的字符串:
#RRGGBB
RR, GG, BB 分別是red,green和blue值的十六進制表示。下面的例子演示瞭如何將一個顏色三元組轉換爲

一個Tk顏色格式:
tk_rgb "#%02x%02x%02x" (128, 192, 200)

Tk也支持用形如"#RGB"和"rrrrggggbbbb"去分別指定16和65536程度之間的值。

你可以使用窗口部件的winfo_rgb方法來將一個代表顏色的字符串(名字或RGB格式)轉換爲一個三元組:
rgb widget.winfo_rgb("red")
red, green, blue rgb[0]/256, rgb[1]/256, rgb[2]/256
注意winfo_rgb返回16位的RGB值,範圍在0~65535之間。要將它們映射到更通用的0~255範圍內,你必須將每個值都除以256(或將它們向右移8位)。 

窗口部件的樣式之字體

字體

窗口部件允許你顯示文本和指定所使用的字體。所有的窗口部件都提供了合理的默認值,你很少需要去爲簡單元素如標籤和按鈕指定字體。

字體通常使用font窗口部件選項指定。Tkinter支持一定數量的不同字體描述類型:
* Font descriptors

* User-defined font names

* System fonts

* X font descriptors

Tk8.0以前的版本僅X font描述被支持。

1、字體描述
從Tk8.0開始,Tkinter支持獨立於平臺的字體描述。你可以使用元組來指定一個字體,這個元組包含了一個字體類型名字,一個以磅爲單位的高度,代表一個或多個樣式的字符串。例如:
("Times", 10, "bold")
("Helvetica", 10, "bold italic")
("Symbol", 8)

要得到默認的尺寸和類型,你可以給出作爲單一字符串的字體名。如果這個字體類型名字沒有包括空格,你也可以給這個字符串自身增加尺寸和樣式:
"Times 10 bold"
"Helvetica 10 bold italic"
"Symbol 8"

在大部份Windows平臺上存在如下有效的字體類名:
Arial (相 應 於 Helvetica), Courier New (Courier), Comic Sans MS, Fixedsys, MS Sans Serif, MS Serif, Symbol, System, Times New Roman (Times), 和 Verdana:
Tkinter類之窗口部件類

注意:如果這個字體類型名包含空格,你必須使用上面所描述的元組語法。

有效的樣式有normal, bold, roman, italic, underline, and overstrike。

Tk8.0自動映射Courier, Helvetica, 和Times到所有平臺上相應的本地字體類型名。此外,在Tk8.0下字體格式不會引起問題,如果Tk不能找出確切的匹配,它會試着找類似的字體,如果失敗,Tk就使用特定平臺的默認字體。

Tk4.2在Windows下同樣支持這種字體描述。這兒有幾個限制,包括字體類型名必須在平臺上存在,並非這所有上面樣式名都存在(或它們中的一些有不同的名字)。

2、字體名
此外,Tk8.0允許你去創建已命名的字體並且當爲一個窗口部件指定字體時使用它們的名字。

tkFont模塊提供一個Font類,這個類允許你去創建字體實例。你可以隨處使用這樣一個實例。你也可能使用一個字體實例來得到字體的量度,包括存在於那個字體中的字符串所站用的尺寸。

 tkFont.Font(family="Times", size=10, weight=tkFont.BOLD)
 tkFont.Font(family="Helvetica", size=10, weight=tkFont.BOLD,
             slant=tkFont.ITALIC)
 tkFont.Font(family="Symbol", size=8)

如果你修改一個已命名的字體(使用config方法),這個改變將自動影響到所有使用這個字體的窗口部件。

Font構造器支持下列的樣式選項(注意常量被定義在tkFont模塊中):

樣式選項及說明:

family選項
類型:字符串
說明:字體類型

size選項
類型:整型
說明:以磅爲單位的字體的尺寸。要以象素爲單位的話,使用負值。

weight選項
類型:常量
說明:字體的粗細。使用NORMAL或BOLD。默認爲NORMAL。

slant選項
類型:常量
說明:字體傾斜。使用NORMAL或ITALIC。默認爲NORMAL。

underline選項
類型:標誌
說明:字體下劃線。如果1(true),字體加下劃線。默認爲0(false)。

overstrike選項
類型:標誌
說明:字體劃線。如果爲1(true),則字體上有一條線;默認爲0(false)。

3、系統字體

Tk也支持特定系統的字體名。在X下,這些通常是字體別名如fixed,6x10等等。

在Windows下,這些包括ansi,ansifixed,device,oemfixed,system和systemfixed:
Tkinter類之窗口部件類

在Macintosh上,系統字體名是application和system。

注意:系統字體是字體名,不是字體類型名,它們不能與尺寸或樣式屬性結合。爲了可移植性,儘可能避免使用這些名字。

4、X字體描述

X字體描述是如下格式的字符串(星號所代表的是無關字段。具體細節可查看Tk文檔或X手冊):
-*-family-weight-slant-*--*-size-*-*-*-*-charset

典型的字體類別如:Times, Helvetica, Courier or Symbol。

weight可以是"Bold"或"Normal"。slant取值中R代表"roman"(正常),I代表"italic",o代表團"oblique"(實際上等同於italic)。

size是字體的高度,以十分之一磅爲單位。一英寸72磅,但是一些低分辯率的顯示器的1磅較常規的大些,以便小字體能夠清晰顯示。charset(字符集)通常是ISO8859-1 (ISO Latin 1), 但一些字體也使用其它的值。

下面的描述的family取值是Times,weight取值是Bold,slant取值是R,size取值是120,charset取值是ISO8859-1:
 -*-Times-Bold-R-*--*-120-*-*-*-*-ISO8859-1

如果你不關心charset(字符集),或你使用如Symbol的字體(這種字體類別有特定的字符集),那麼你可以使用一個星號作爲描述的最後部分:
-*-Symbol-*-*-*--*-80-*

典 型的X server至少支持Times, Helvetica, Courier等字體,size有8, 10, 12, 14, 18, 和 24 磅,weight有normal,bold、italic(Times)或oblique(Helvetica, Courier)。大多數的服務器都有 支持隨意查看字體。你可以使用如xlsfonts和xfontsel來檢查你所訪問的服務器的字體。

這種類型的字體描述可以用在Windows 和Macintosh上。注意:如果你使用Tk4.2,你必須牢記字體類型必須是Windows所支持的一種。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章