python-Tkinter界面組件屬性介紹(二)

轉(zhuǎn)載自:https://my.oschina.net/u/2403163/blog/491077?p=1
1.Button 按鈕。類似標(biāo)簽,但提供額外的功能,例如鼠標(biāo)掠過、按下、釋放以及鍵盤操作/事件
2.Canvas 畫布。提供繪圖功能(直線、橢圓、多邊形、矩形) ;可以包含圖形或位圖
3.Checkbutton 選擇按鈕。一組方框,可以選擇其中的任意個(gè)(類似 HTML 中的 checkbox)
4.Entry 文本框。單行文字域,用來收集鍵盤輸入(類似 HTML 中的 text)
5.Frame 框架。包含其他組件的純?nèi)萜?/p>
6.Label 標(biāo)簽。用來顯示文字或圖片
7.Listbox 列表框。一個(gè)選項(xiàng)列表,用戶可以從中選擇
8.Menu 菜單。點(diǎn)下菜單按鈕后彈出的一個(gè)選項(xiàng)列表,用戶可以從中選擇
9.Menubutton 菜單按鈕。用來包含菜單的組件(有下拉式、層疊式等等)
10.Message 消息框。類似于標(biāo)簽,但可以顯示多行文本
11.Radiobutton 單選按鈕。一組按鈕,其中只有一個(gè)可被“按下” (類似 HTML 中的 radio)
12.Scale 進(jìn)度條。線性“滑塊”組件,可設(shè)定起始值和結(jié)束值,會顯示當(dāng)前位置的精確值
13.Scrollbar 滾動條。對其支持的組件(文本域、畫布、列表框、文本框)提供滾動功能
14.Text 文本域。 多行文字區(qū)域,可用來收集(或顯示)用戶輸入的文字(類似 HTML 中的 textarea)
15.Toplevel 頂級。類似框架,但提供一個(gè)獨(dú)立的窗口容器。
TKinter支持15個(gè)核心的窗口部件,這個(gè)15個(gè)核心窗口部件類列表如下:
窗口部件及說明:
Button:
一個(gè)簡單的按鈕,用來執(zhí)行一個(gè)命令或別的操作。
Canvas:
組織圖形。這個(gè)部件可以用來繪制圖表和圖,創(chuàng)建圖形編輯器,實(shí)現(xiàn)定制窗口部件。
Checkbutton:
代表一個(gè)變量,它有兩個(gè)不同的值。點(diǎn)擊這個(gè)按鈕將會在這兩個(gè)值間切換。
Entry:
文本輸入域。
Frame:
一個(gè)容器窗口部件。幀可以有邊框和背景,當(dāng)創(chuàng)建一個(gè)應(yīng)用程序或dialog(對話)版面時(shí),幀被用來組織其它的窗口部件。
Label:
顯示一個(gè)文本或圖象。
Listbox:
顯示供選方案的一個(gè)列表。listbox能夠被配置來得到radiobutton或checklist的行為。
Menu:
菜單條。用來實(shí)現(xiàn)下拉和彈出式菜單。
Menubutton:
菜單按鈕。用來實(shí)現(xiàn)下拉式菜單。
Message:
顯示一文本。類似label窗口部件,但是能夠自動地調(diào)整文本到給定的寬度或比率。
Radiobutton:
代表一個(gè)變量,它可以有多個(gè)值中的一個(gè)。點(diǎn)擊它將為這個(gè)變量設(shè)置值,并且清除與這同一變量相關(guān)的其它radiobutton。
Scale:
允許你通過滑塊來設(shè)置一數(shù)字值。
Scrollbar:
為配合使用canvas,?entry,?listbox,?and?text窗口部件的標(biāo)準(zhǔn)滾動條。
Text:
格式化文本顯示。允許你用不同的樣式和屬性來顯示和編輯文本。同時(shí)支持內(nèi)嵌圖象和窗口。
Toplevel:
一個(gè)容器窗口部件,作為一個(gè)單獨(dú)的、最上面的窗口顯示。
注意在Tkinter中窗口部件類沒有分級;所有的窗口部件類在樹中都是兄弟。
所有這些窗口部件提供了Misc和幾何管理方法、配置管理方法和部件自己定義的另外的方法。此外,Toplevel類也提供窗口管理接口。這意味一個(gè)典型的窗口部件類提供了大約150種方法。
Button窗口部件
Button(按鈕)窗口部件是一個(gè)標(biāo)準(zhǔn)的Tkinter窗口部件,用來實(shí)現(xiàn)各種按鈕。按鈕能夠包含文本或圖象,并且你能夠?qū)粹o與一個(gè)Python函數(shù)或方法相關(guān)聯(lián)。當(dāng)這個(gè)按鈕被按下時(shí),Tkinter自動調(diào)用相關(guān)聯(lián)的函數(shù)或方法。
按鈕僅能顯示一種字體,但是這個(gè)文本可以跨行。另外,這個(gè)文本中的一個(gè)字母可以有下劃線,例如標(biāo)明一個(gè)快捷鍵。默認(rèn)情況,Tab鍵用于將焦點(diǎn)移動到一個(gè)按鈕部件。
一、那么什么時(shí)候用按鈕部件呢?
簡而言之,按鈕部件用來讓用戶說“馬上給我執(zhí)行這個(gè)任務(wù)”,通常我們用顯示在按鈕上的文本或圖象來提示。按鈕通常用在工具條中或應(yīng)用程序窗口中,并且用來接收或忽略輸入在對話框中的數(shù)據(jù)。
關(guān)于按鈕和輸入的數(shù)據(jù)的配合,可以參看Checkbutton和Radiobutton部件。
二、樣式
普通的按鈕很容易被創(chuàng)建,僅僅指定按鈕的內(nèi)容(文本、位圖、圖象)和一個(gè)當(dāng)按鈕被按下時(shí)的回調(diào)函數(shù)即可:
b?=?Button(master,?text="OK",?command=self.ok)
沒有回調(diào)函數(shù)的按鈕是沒有用的,當(dāng)你按下這個(gè)按鈕時(shí)它什么也不做。你可能在開發(fā)一個(gè)應(yīng)用程序的時(shí)候想實(shí)現(xiàn)這種按鈕,比如為了不干擾你的beta版的測試者:
b?=?Button(master,?text="Help",?state=DISABLED)
如 果你沒有指定尺寸,按鈕的大小將正好能夠容納它的內(nèi)容。你可以用padx和pady選項(xiàng)來增加內(nèi)容與按鈕邊框的間距。你也可以用height和width 選項(xiàng)來顯式地設(shè)置按鈕的尺寸。如果你在按鈕中顯示文本,那么這些選項(xiàng)將以文本的單位為定義按鈕的尺寸。如果你替而代之顯示圖象,那么按鈕的尺寸將是象素 (或其它的屏幕單位)。你實(shí)際上甚至能夠用象素單位來定義文本按鈕的尺寸,但這可能帶來意外的結(jié)果。下面是指定尺寸的一段例子代碼:
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選項(xiàng)來使按鈕自己調(diào)整文本。當(dāng)調(diào)整文本時(shí),使用anchor,justify,也可加上padx選項(xiàng)來得到你所希望的格式。一個(gè)例子如下:
b?=?Button(master,?text=longtext,?anchor=W,?justify=LEFT,?padx=2)
為了使一個(gè)普通的按鈕看起來像凹入的,例如你想去實(shí)現(xiàn)某種類型的工具框,你可簡單地將relief的值從"RAISED"改變?yōu)?SUNKEN:
b.config(relief=SUNKEN)
你也可能想改變背景。注意:一個(gè)大概更好的解決方案是使用一個(gè)Checkbutton或Radiobutton其indicatoron選項(xiàng)的值設(shè)置為false:
b?=?Checkbutton(master,?image=bold,?variable=var,?indicatoron=0)
三、方法
Button窗口部件支持標(biāo)準(zhǔn)的Tkinter窗口部件接口,加上下面的方法:
flash():頻繁重畫按鈕,使其在活動和普通樣式下切換。
invoke()?:調(diào)用與按鈕相關(guān)聯(lián)的命令。
下面的方法與你實(shí)現(xiàn)自己的按鈕綁定有關(guān):
tkButtonDown(),?tkButtonEnter(),?tkButtonInvoke(),?tkButtonLeave(),?tkButtonUp()
這些方法可以用在定制事件綁定中,所有這些方法接收0個(gè)或多個(gè)形參。
四、選項(xiàng)
Button窗口部件支持下面的選項(xiàng):
activebackground,?activeforeground
類型:顏色;
說明:當(dāng)按鈕被激活時(shí)所使用的顏色。
anchor
類型:常量;
說明:控制按鈕上內(nèi)容的位置。使用N,?NE,?E,?SE,?S,?SW,?W,?NW,?or?CENTER這些值之一。默認(rèn)值是CENTER。
background?(bg),?foreground?(fg)
類型:顏色;
說明:按鈕的顏色。默認(rèn)值與特定平臺相關(guān)。
bitmap
類型:位圖;
說 明:顯示在窗口部件中的位圖。如果image選項(xiàng)被指定了,則這個(gè)選項(xiàng)被忽略。下面的位圖在所有平臺上都有 效:error,?gray75,?gray50,?gray25,?gray12,?hourglass,?info,?questhead,?question,?和?warning.
這 后面附加的位圖僅在Macintosh上有 效:document,?stationery,?edition,?application,?accessory,?folder,?pfolder,?trash,?floppy,?ramdisk,?cdrom,?preferences,?querydoc,?stop,?note,?和?caution.
你也可以從一個(gè)XBM文件中裝載位圖。只需要在XBM文件名前加一個(gè)前綴@,例如"@sample.xbm"。
borderwidth?(bd)
類型:整數(shù);
說明:按鈕邊框的寬度。默認(rèn)值與特定平臺相關(guān)。但通常是1或2象素。
command
類型:回調(diào);
說明:當(dāng)按鈕被按下時(shí)所調(diào)用的一個(gè)函數(shù)或方法。所回調(diào)的可以是一個(gè)函數(shù)、方法或別的可調(diào)用的Python對象。
cursor
類型:光標(biāo);
說明:當(dāng)鼠標(biāo)移動到按鈕上時(shí)所顯示的光標(biāo)。
default
類型:常量;
說明:如果設(shè)置了,則按鈕為默認(rèn)按鈕。注意這個(gè)語法在Tk?8.0b2中已改變。
disabledforeground
類型:顏色;
說明:當(dāng)按鈕無效時(shí)的顏色。
font
類型:字體;
說明:按鈕所使用的字體。按鈕只能包含一種字體的文本。
highlightbackground,?highlightcolor
類型:顏色;
說明:控制焦點(diǎn)所在的高亮邊框的顏色。當(dāng)窗口部件獲得焦點(diǎn)的時(shí)候,邊框?yàn)閔ighlightcolor所指定的顏色。否則邊框?yàn)閔ighlightbackground所指定的顏色。默認(rèn)值由系統(tǒng)所定。
highlightthickness
類型:距離;
說明:控制焦點(diǎn)所在的高亮邊框的寬度。默認(rèn)值通常是1或2象素。
image
類型:圖象;
說明:在部件中顯示的圖象。如果指定,則text和bitmap選項(xiàng)將被忽略。
justify
類型:常量;
說明:定義多行文本如何對齊。可取值有:LEFT,?RIGHT,?或?CENTER。
padx,?pady
類型:距離;
說明:指定文本或圖象與按鈕邊框的間距。
relief
類型:常量;
說明:邊框的裝飾。通常按鈕按下時(shí)是凹陷的,否則凸起。另外的可能取值有GROOVE,?RIDGE,?和?FLAT。
state
類型:常量;
說明:按鈕的狀態(tài):NORMAL,?ACTIVE?或?DISABLED。默認(rèn)值為NORMAL。
takefocus
類型:標(biāo)志;
說明:表明用戶可以Tab鍵來將焦點(diǎn)移到這個(gè)按鈕上。默認(rèn)值是一個(gè)空字符串,意思是如果按鈕有按鍵綁定的話,它可以通過所綁定的按鍵來獲得焦點(diǎn)。
text
類型:字符串;
說明:顯示在按鈕中的文本。文本可以是多行。如果bitmaps或image選項(xiàng)被使用,則text選項(xiàng)被忽略。
textvariable
類型:變量;
說明:與按鈕相關(guān)的Tk變量(通常是一個(gè)字符串變量)。如果這個(gè)變量的值改變,那么按鈕上的文本相應(yīng)更新。
underline
類型:整數(shù);
說明:在文本標(biāo)簽中哪個(gè)字符加下劃線。默認(rèn)值為-1,意思是沒有字符加下劃線。
width,?height
類型:距離;
說明:按鈕的尺寸。如果按鈕顯示文本,尺寸使用文本的單位。如果按鈕顯示圖象,尺寸以象素為單位(或屏幕的單位)。如果尺寸沒指定,它將根據(jù)按鈕的內(nèi)容來計(jì)算。
wraplength
類型:距離;
說明:確定一個(gè)按鈕的文本何時(shí)調(diào)整為多行。它以屏幕的單位為單位。默認(rèn)不調(diào)整。
Mixins
Tkinter模塊提供了相應(yīng)于Tk中的各種窗口部件類型的類和一定數(shù)量的mixin和別的幫助類(mixin是一個(gè)類,被設(shè)計(jì)來使用多態(tài)繼承與其它的類結(jié)合)。當(dāng)你使用Tkinter時(shí),你不將直接訪問mixin類。
一、實(shí)施mixins
通過root窗口和窗口部件類,Misc類被用作mixin。它提供了大量的Tk和窗口相關(guān)服務(wù),這些服務(wù)對所有Tkinter核心窗口部件者有效。這些通過委托完成;窗口部件僅僅直接請求適當(dāng)?shù)膬?nèi)部對象。
Wm類通過root窗口和頂級窗口部件類被用作mixin。通過委托它提供了窗口管理服務(wù)。
使用委托像這樣簡化你的應(yīng)用程序代碼:一旦你有一窗口部件,你能夠使用這個(gè)窗口部件的實(shí)例的方法訪問Tkinter的所有部份。
二、Geometry(幾何學(xué))與mixins
Grid,Pack,Place這些類通過窗口部件類被用作mixins。通過委托,它們也提供了訪問不同幾何管理的支持。
下面是Geometry?Mixins的列表及說明:
管理器及說明:
Grid:grid幾何管理器允許你通過在一個(gè)二維網(wǎng)格中組織窗口部件來創(chuàng)建一個(gè)類似表的版面。
Pack:pack幾何管理器通過在一個(gè)幀中把窗口部件包裝到一個(gè)父部件中來創(chuàng)建一個(gè)版面。為了對窗口部件使用這個(gè)幾何管理器,我們在這個(gè)窗口部件上使用pack方法來集成。
Place:place幾何管理器讓你顯式將一個(gè)窗口部件放到給定的位置。要使用這個(gè)幾何管理器,需使用place方法。
三、窗口部件配置管理
Widget類使用?geometry?mixins來混合Misc類,并通過cget和configure方法來增加配置管理,也可以通過一個(gè)局部的字典接口。
窗口部件的配置
要配置一個(gè)窗口部件的外觀,你用選項(xiàng)比使用方法調(diào)用好。典型的選項(xiàng)包括text、color、size、command等等。對于處理選項(xiàng),所有的核心窗口部件執(zhí)行同樣的配置接口:
配置接口
widgetclass(master,?option=value,?...)?=>?widget
說明:
創(chuàng) 建這個(gè)窗口部件的一個(gè)實(shí)例,這個(gè)實(shí)例作為給定的master的孩子,并且使用給定的選項(xiàng)。所有的選項(xiàng)都有默認(rèn)值,因此在簡單的情況下,你僅需要指定這個(gè) master。如果你想的話,你也可以不指定master;Tkinter這時(shí)會使用最近創(chuàng)建的root窗口作為master。注意這個(gè)name選項(xiàng)僅能 在窗口部件被創(chuàng)建時(shí)設(shè)置。
cget(option)?=>?string
說明:
返回一個(gè)選項(xiàng)的當(dāng)前值。選項(xiàng)的名字和返回值都是字符串。要得到name選項(xiàng),使用str(widget)代替。
configure(option=value,?...),?config(option=value,?...)
說明:
設(shè)置一個(gè)或多個(gè)選項(xiàng)(作為關(guān)鍵字參數(shù)給定)。
注意一些選項(xiàng)的名字與Python中的保留字相同(class,from等)。要使用這些作為關(guān)鍵字參數(shù),僅需要在這些選項(xiàng)名后添加一下劃線(class_,from_)。注意你不能用此方法來設(shè)置name選項(xiàng);name選項(xiàng)只能在窗口部件被創(chuàng)建時(shí)設(shè)置。
為了方便起見,窗口部件也實(shí)現(xiàn)一個(gè)局部的字典接口。?__setitem__?方法映射configure,而__getitem__方法映射cget。你可以使用下面的語法來設(shè)置和查詢選項(xiàng):
value?=?widget[option]
widget[option]?=?value
注意每個(gè)賦值都導(dǎo)致一個(gè)對Tk的調(diào)用。如果你希望去改變多個(gè)選項(xiàng),單獨(dú)地調(diào)用(config或configure)去改變它們是一個(gè)好的主意。
這下面的字典方法也適用于窗口部件:
keys()?=>?list
說明:
返回窗口部件中所有可以被設(shè)置的選項(xiàng)的一個(gè)列表。name選項(xiàng)不包括在這個(gè)列表中(它不能通過字典接口被查詢或修改)。
向后兼容性
關(guān)鍵字參數(shù)在Python1.3時(shí)被引入。之前,使用原始的Python字典將選項(xiàng)傳遞給窗口構(gòu)造器和configure方法。原代碼類似如下:
self.button?=?Button(frame,?{"text":?"QUIT",?"fg":?"red",?"command":?frame.quit})
self.button.pack({"side":?LEFT})
關(guān)鍵字參數(shù)語法更優(yōu)雅和少容易發(fā)生錯(cuò)誤。但是為了與存在的代碼兼容,Tkinter仍支持老的語法。在新的程序中你不應(yīng)再用老的語法,即使是在某些情況下是很有吸引力的。例如,如果你創(chuàng)建了一個(gè)定制的窗口部件,它需要沿它的父類傳遞配置選項(xiàng),你的代碼可能如下:
def?__init__(self,?master,?**kw):
Canvas.__init__(self,?master,?kw)?#?kw?是一個(gè)字典
上面的代碼在當(dāng)前版本的Tkinter下工作的很好,但是它在將來的版本下可能不工作。一個(gè)通常的辦法是使用apply函數(shù):
def?__init__(self,?master,?**kw):
apply(Canvas.__init__,?(self,?master),?kw)
這個(gè)apply函數(shù)使用了一個(gè)函數(shù)(一個(gè)未約束的方法),一個(gè)帶參數(shù)的元組(它必須包括self,因?yàn)槲覀冋{(diào)用一個(gè)未約束的方法),一個(gè)可選的,提供了關(guān)鍵字參數(shù)的字典。
窗口部件的樣式之顏色
所有的Tkinter標(biāo)準(zhǔn)窗口部件提供了一套樣式設(shè)置選項(xiàng),這讓你可以去修改這些窗口部件的外觀如顏色、字體和其它的可視外觀。
顏色
大部份窗口部件都允許你指定窗口部件和文本的顏色,這可以使用background和foreground選項(xiàng)。要指定顏色,你可以使用顏色名,也可以使用紅、綠、藍(lán)顏色組合。
1、顏色名
Tkinter 包括一個(gè)顏色數(shù)據(jù)庫,它將顏色名映射到相應(yīng)的RGB值。這個(gè)數(shù)據(jù)庫包括了通常的名稱如Red,?Green,?Blue,?Yellow,?和 LightBlue,也可使用外來的如Moccasin,PeachPuff等等。在X?window系統(tǒng)上,顏色名由X?server定義。你能夠找到 一個(gè)名為xrgb.txt的文件,它包含了一個(gè)由顏色名和相應(yīng)RGB值組成的列表。在Windows和Macintosh系統(tǒng)上,顏色名表內(nèi)建于Tk中。
在Windows下,你可以使用Windows系統(tǒng)顏色(用戶可以通過控制面板來改變這些顏色):
SystemActiveBorder,?SystemActiveCaption,?SystemAppWorkspace,?SystemBackground,
SystemButtonFace,?SystemButtonHighlight,?SystemButtonShadow,?SystemButtonText,
SystemCaptionText,?SystemDisabledText,?SystemHighlight,?SystemHighlightText,
SystemInactiveBorder,?SystemInactiveCaption,?SystemInactiveCaptionText,?SystemMenu,
SystemMenuText,?SystemScrollbar,?SystemWindow,?SystemWindowFrame,?SystemWindowText。
在Macintosh上,下面的系統(tǒng)顏色是有效的:
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值的十六進(jìn)制表示。下面的例子演示了如何將一個(gè)顏色三元組轉(zhuǎn)換為
一個(gè)Tk顏色格式:
tk_rgb?=?"#%02x%02x%02x"?%?(128,?192,?200)
Tk也支持用形如"#RGB"和"rrrrggggbbbb"去分別指定16和65536程度之間的值。
你可以使用窗口部件的winfo_rgb方法來將一個(gè)代表顏色的字符串(名字或RGB格式)轉(zhuǎn)換為一個(gè)三元組:
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范圍內(nèi),你必須將每個(gè)值都除以256(或?qū)⑺鼈兿蛴乙?位)。
HTML Python 容器
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。