Tkinter基本入門文字教程(詳細介紹Tkinter各項例程)_第1頁
Tkinter基本入門文字教程(詳細介紹Tkinter各項例程)_第2頁
Tkinter基本入門文字教程(詳細介紹Tkinter各項例程)_第3頁
Tkinter基本入門文字教程(詳細介紹Tkinter各項例程)_第4頁
Tkinter基本入門文字教程(詳細介紹Tkinter各項例程)_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、什么是TkinterTkinter(也叫Tk接口)是Tk圖形用戶界面工具包標準的Python接口。Tk是一個輕量級的跨平臺圖形用戶界面(GUI)開發(fā)工具。Tk和Tkinter可以運行在大多數(shù)的Unix平臺、Windows、和Macintosh系統(tǒng)。Tkinter由一定數(shù)量的模塊組成。Tkinter位于一個名為_tkinter(較早的版本名為tkinter)的二進制模塊中。Tkinter包含了對Tk的低級接口模塊,低級接口并不會被應用級程序員直接使用,通常是一個共享庫(或DLL),但是在一些情況下它也被Python解釋器靜態(tài)鏈接。除了Tk接口模塊,Tkinter也包含了一定數(shù)量的Python模塊

2、。其中兩個最重要的模塊是Tkinter本身和名為Tkconstants的模塊。前者自動引導后者,因此使用Tkinter,你首先需要做的是導入Tkinter模塊,代碼如下:importTkinter或fromTkinterimport*第一個Tkinter程序一、代碼如下:#File:hellol.pyfromTkinterimport*root=Tk()w=Label(root,text=Hello,world!)w.pack()root.mainloop()運行結果如下:關閉這個窗口即可終止這個程序的運行。二、對代碼的說明:我們通過導入Tkinter模塊開始。Tkinter模塊包含了用Tk工

3、具包工作所需的所有的類,函數(shù)和其它一些必須的東西。在大多數(shù)情況下,你只需要簡單的從Tkinter導入所有的東西到你的模塊的名字空間,如下所示:fromTkinterimport*然后初始化Tkinter,方法是我們必須先創(chuàng)建一個Tkroot(根)窗口部件,它是一個普通的窗口,帶有標題條和其它由你的窗口管理器供給的附屬。你應該只創(chuàng)建一個root窗口部件,這個root窗口部件必須在其它窗口部件創(chuàng)建之前創(chuàng)建。初始化Tkinter的代碼如下:root=Tk()接著我們創(chuàng)建一個Label(標簽)窗口部件作為這個root窗口的孩子,代碼如下:w=Label(root,text=” HYPERLINK !)

4、Label窗口部件可以顯示文本、圖標或圖象。我們這里用text選項來指定要顯示的文本。接下來我們在Label窗口部件上調(diào)用了pack方法,它告訴Label窗口部件去調(diào)整自己的尺寸來適應所給定文本的大小,并且使用自己可見,代碼如下:w.pack()但是在這些發(fā)生之前,我們必須進入Tkinter的事件循環(huán),代碼如下:root.mainloop()這個程序?qū)⒁恢碧幵谑录h(huán)之中,直到我們關閉了這個窗口。事件循環(huán)不僅僅處理來自用戶的事件(如鼠標敲擊和按鍵按下)或者窗口系統(tǒng)(重繪事件和窗口配置消息),它也處理來自Tkinter自身的工作等待隊列,這些工作之一就包括由pack方法所產(chǎn)生的工作和顯示更新。這

5、就意味著這個應用程序窗口在進入這個事件循環(huán)之前將不會顯示出來。第二個Tkinter程序當我們在寫一個較大的程序的時候,把代碼封裝在類中通常是一個好的主意。一、代碼如下:#File:hello2.pyfromTkinterimport*classApp:def_init_(self,master):frame=Frame(master)frame.pack()self.button=Button(frame,text=QUIT,fg=red,command=frame.quit)self.button.pack(side= HYPERLINK LEFT)self.hi_there=Button(

6、frame,text=Hello,command=self.say_hi)self.hi_there.pack(side=LEFT)defsay_hi(self):printhithere,everyone!root=Tk()app=App(root)root.mainloop()運行結果如下:如果你點擊Hello按鈕,將在控制臺打印出hithere,everyone!。如果你點擊QUIT按鈕,程序?qū)⒔K止。、代碼說明:這個簡單的應用程序被寫成了一個類。這個構造器(_init_方法)通過一個父部件被調(diào)用,并針對父部件增加了一些子部件。構造器通過創(chuàng)建一個Frame(幀)窗口部件開始。一個幀是一個簡

7、單的容器,在這個例子中,我們僅用來容納另外的兩個部件。classApp:def_init_(self,master):frame=Frame(master)frame.pack()這個幀實例被存儲在一個名為Frame的局部變量中。在創(chuàng)建了這個部件后,我們立即調(diào)用pack方法來使用這個幀可見。然后我們創(chuàng)建兩個Button(按鈕)窗口部件作為這個幀的孩子。self.button=Button(frame,text=QUIT,fg=red,command=frame.quit)self.button.pack(side=LEFT)self.hi_there=Button(frame,text=Hel

8、lo,command=self.say_hi)self.hi_there.pack(side=LEFT)這次,我們傳遞了一定數(shù)量的選項給構造器。第一個按鈕被標為QUIT,字為紅色(fg是foregroundv前景色的縮寫)。第二個被標為Hello。兩個按鈕都有一個command選項。這個選項指定了一個函數(shù)或方法,在按鈕被點擊時會被調(diào)用。按鈕實例被存儲在實例屬性組中。side=LEFT參數(shù)表示這兩個按鈕在幀中將被分開放置;第一個按鈕被放置在幀的左邊緣,第二個被放在第一個的右邊(幀的左邊緣仍保留著空格)。默認情況下,部件的放置都是相對于它們的父親(frame部件相對于master,button相對

9、于frame)0如果side選項沒指定,side默認值為TOP。Hello按鈕的回調(diào)函數(shù)如下所示,它在按鈕每次被按下時簡單地打印一條信息給控制臺:defsay_hi(self):printhithere,everyone!最后我們提供了一些腳本級的代碼來創(chuàng)建一個Tkroot部件,和一個App類的實例(這個實例使用這個root部件作為它的父親):root=Tk()app=App(root)root.mainloop()root.mainloop()調(diào)用root部件的mainloop方法。它進入Tk事件循環(huán),這個應用程序?qū)⑻幱谶@個Tk事件循環(huán)之中直到quit方法被調(diào)用(點擊QUIT按鈕),或窗口被

10、關閉。關于窗口部件引用在第二個例子中,frame部件被存儲在一個名為frame的局部變量中,而button部件則存儲在兩個實例的屬性組中。這是否隱藏著一個嚴重的問題呢:當_init_函數(shù)返回并且frame變量超出了范圍會發(fā)生什么呢?。不要緊;這兒確實沒有必要去保持對窗口部件實例的引用oTkinter自動維護一個窗口部件樹(通過對象實例的master和children屬性),因此,當應用程序的最后一個引用消失時窗口部件不會消失;窗口部件必須顯示的用destroy方法銷毀。但是如果你希望在窗口部件被創(chuàng)建以后用它來做一些事情,你最好保持對你自己的窗口部件實例的引用。注意如果你不需要保持對一個窗口部件

11、的引用,你可以用單獨的一行來創(chuàng)建和pack(包裝)它,如下:Button(frame,text=Hello,command=self.hello).pack(side=LEFT)不要存儲這個操作的結果,當你試圖去用這個結果時你會很失望(因為pack方法返回None)。為小心起見,最好將將pack(包裝)分開,如下所示:w=Button(frame,text=Hello,command=self.hello)w.pack(side=LEFT)關于窗口部件的名字另一個容量引起混淆的方面(尤其是使用Tcl編程Tk的有一些經(jīng)驗的人)是Tinter的窗口部件的名字的概念。在Tcl中,你必須顯示的命名每一

12、個窗口部件。例如下面的Tcl命令創(chuàng)建一個名為ok的按鈕作為名為dialog的窗口部件的孩子(dialog又是root窗口的孩子):button.dialog.ok相應的Tkinter調(diào)用將如下:ok=Button(dialog)在這個Tkinter案例中,ok和dialog是對窗口部件實例的引用,不是窗口部件實際的名字。因為Tk自身需要這些名字,Tkinter自動為每個新窗口部件賦一個唯一的名字。在這個Tkinter案例中,這個dialog的名字或許類似.1428748,并且button可能是.1428748.1432920。如果你希望得到一個Tkinter窗口部件的完整名字,你可以在這個窗口

13、部件實例上使用str函數(shù):printstr(ok).142874&1432920如果你確實需要為一個窗口部件指定一個名字,你可以在你創(chuàng)建這個窗口部件時使用name選項。你這么做的原因可能是你需要和用Tcl寫的代碼接口。下面的例子將產(chǎn)生一個名為.dialog.ok的窗口部件(如果你忘了命名dialog,那么名字可能類似.1428748.ok):ok=Button(dialog,name=ok)為了避免與此同時Tkinter的名字機制相沖突,不要使用只包含數(shù)字的名字。同樣注意name是只能創(chuàng)建一次的選項;一旦你創(chuàng)建了這個部件的名字,那么你就不能再改變它的名字了。Tkinter類之窗口部件類Tkin

14、ter支持15個核心的窗口部件,這個15個核心窗口部件類列表如下:窗口部件及說明:Button:一個簡單的按鈕,用來執(zhí)行一個命令或別的操作。Canvas:組織圖形。這個部件可以用來繪制圖表和圖,創(chuàng)建圖形編輯器,實現(xiàn)定制窗口部件。Checkbutton:代表一個變量,它有兩個不同的值。點擊這個按鈕將會在這兩個值間切換。Entry:文本輸入域。Frame:一個容器窗口部件。幀可以有邊框和背景,當創(chuàng)建一個應用程序或dialog(對話)版面時,幀被用來組織其它的窗口部件。Label:顯示一個文本或圖象。Listbox:顯示供選方案的一個列表。listbox能夠被配置來得到radiobutton或che

15、cklist的行為。Menu:菜單條。用來實現(xiàn)下拉和彈出式菜單。Menubutton:菜單按鈕。用來實現(xiàn)下拉式菜單。Message:顯示一文本。類似label窗口部件,但是能夠自動地調(diào)整文本到給定的寬度或比率。Radiobutton:代表一個變量,它可以有多個值中的一個。點擊它將為這個變量設置值,并且清除與這同一變量相關的其它radiobuttonoScale:允許你通過滑塊來設置一數(shù)字值。Scrollbar:為配合使用canvas,entry,listbox,andtext窗口部件的標準滾動條。Text:格式化文本顯示。允許你用不同的樣式和屬性來顯示和編輯文本。同時支持內(nèi)嵌圖象和窗口。Top

16、level:一個容器窗口部件,作為一個單獨的、最上面的窗口顯示。注意在Tkinter中窗口部件類沒有分級;所有的窗口部件類在樹中都是兄弟。所有這些窗口部件提供了Misc和幾何管理方法、配置管理方法和部件自己定義的另外的方法。此外,Toplevel類也提供窗口管理接口。這意味一個典型的窗口部件類提供了大約150種方法。Button窗口部件Button(按鈕)窗口部件是一個標準的Tkinter窗口部件,用來實現(xiàn)各種按鈕。按鈕能夠包含文本或圖象,并且你能夠?qū)粹o與一個Python函數(shù)或方法相關聯(lián)。當這個按鈕被按下時,Tkinter自動調(diào)用相關聯(lián)的函數(shù)或方法。按鈕僅能顯示一種字體,但是這個文本可以跨行

17、。另外,這個文本中的一個字母可以有下劃線,例如標明一個快捷鍵。默認情況,Tab鍵用于將焦點移動到一個按鈕部件。一、那么什么時候用按鈕部件呢?簡而言之,按鈕部件用來讓用戶說“馬上給我執(zhí)行這個任務”,通常我們用顯示在按鈕上的文本或圖象來提示。按鈕通常用在工具條中或應用程序窗口中,并且用來接收或忽略輸入在對話框中的數(shù)據(jù)。關于按鈕和輸入的數(shù)據(jù)的配合,可以參看Checkbutton和Radiobutton部件。一、樣式普通的按鈕很容易被創(chuàng)建,僅僅指定按鈕的內(nèi)容(文本、位圖、圖象)和一個當按鈕被按下時的回調(diào)函數(shù)即可:b=Button(master,text=OK,command=self.ok)沒有回調(diào)函

18、數(shù)的按鈕是沒有用的,當你按下這個按鈕時它什么也不做。你可能在開發(fā)一個應用程序的時候想實現(xiàn)這種按鈕,比如為了不干擾你的beta版的測試者:b=Button(master,text=Help,state=DISABLED)如果你沒有指定尺寸,按鈕的大小將正好能夠容納它的內(nèi)容。你可以用padx和pady選項來增加內(nèi)容與按鈕邊框的間距。你也可以用height和width選項來顯式地設置按鈕的尺寸。如果你在按鈕中顯示文本,那么這些選項將以文本的單位為定義按鈕的尺寸。如果你替而代之顯示圖象,那么按鈕的尺寸將是象素(或其它的屏幕單位)。你實際上甚至能夠用象素單位來定義文本按鈕的尺寸,但這可能帶來意外的結果。

19、下面是指定尺寸的一段例子代碼:f=Frame(master,height=32,width=32)f.pack_propagate( HYPERLINK )#dontshrinkb=Button(f,tex仁Sure!)b.pack(fill=BOTH,expand=1)按鈕能夠顯示多行文本(但只能用一種字體)。你可以使用多行或wraplength選項來使按鈕自己調(diào)整文本。當調(diào)整文本時,使用anchorjustify也可加上padx選項來得到你所希望的格式。一個例子如下:b=Button(master,text=longtext,anchor=W,justify=LEFT,padx=2)為了使

20、一個普通的按鈕看起來像凹入的,例如你想去實現(xiàn)某種類型的工具框,你可簡單地將relief的值從RAISED改變?yōu)镾UNKEN:b.config(relief=SUNKEN)你也可能想改變背景。注意:一個大概更好的解決方案是使用一個Checkbutton或Radiobutton其indicatoron選項的值設置為false:b=Checkbutton(master,image=bold,variable=var,indicatoron=0)三、方法Button窗口部件支持標準的Tkinter窗口部件接口,加上下面的方法:flash():頻繁重畫按鈕,使其在活動和普通樣式下切換。invoke():

21、調(diào)用與按鈕相關聯(lián)的命令。下面的方法與你實現(xiàn)自己的按鈕綁定有關:tkButtonDown(),tkButtonEnter(),tkButtonInvoke(),tkButtonLeave(),tkButtonUp()這些方法可以用在定制事件綁定中,所有這些方法接收0個或多個形參。四、選項Button窗口部件支持下面的選項:activebackground,activeforeground類型:顏色;說明:當按鈕被激活時所使用的顏色。anchor類型:常量;說明:控制按鈕上內(nèi)容的位置。使用N,NE,E,SE,S,SW,W,NW,orCENTER這些值之一。默認值是CENTERobackground

22、(bg),foreground(fg)類型:顏色;說明:按鈕的顏色。默認值與特定平臺相關。bitmap類型:位圖;說明:顯示在窗口部件中的位圖。如果image選項被指定了,則這個選項被忽略。下面的位圖在所有平臺上都有效:error,gray75,gray50,gray25,gray12,hourglass,info,questhead,question,和warning.這后面附加的位圖僅在Macintosh上有效:document,stationery,edition,application,accessory,folder,pfolder,trash,floppy,ramdisk,cdro

23、m,preferences,querydoc,stop,note,和caution.你也可以從一個XBM文件中裝載位圖。只需要在XBM文件名前加一個前綴,例如sample.xbm。borderwidth(bd)類型:整數(shù);說明:按鈕邊框的寬度。默認值與特定平臺相關。但通常是1或2象素。command類型:回調(diào);說明:當按鈕被按下時所調(diào)用的一個函數(shù)或方法。所回調(diào)的可以是一個函數(shù)、方法或別的可調(diào)用的Python對象。cursor類型:光標;說明:當鼠標移動到按鈕上時所顯示的光標。default類型:常量;說明:如果設置了,則按鈕為默認按鈕。注意這個語法在Tk8.0b2中已改變。disabledfo

24、reground類型:顏色;說明:當按鈕無效時的顏色。font類型:字體;說明:按鈕所使用的字體。按鈕只能包含一種字體的文本。highlightbackground,highlightcolor類型:顏色;說明:控制焦點所在的高亮邊框的顏色。當窗口部件獲得焦點的時候,邊框為highlightcolor所指定的顏色。否則邊框為highlightbackground所指定的顏色。默認值由系統(tǒng)所定。highlightthickness類型:距離;說明:控制焦點所在的高亮邊框的寬度。默認值通常是1或2象素。image類型:圖象;說明:在部件中顯示的圖象。如果指定,則text和bitmap選項將被忽略。

25、justify類型:常量;說明:定義多行文本如何對齊??扇≈涤校篖EFT,RIGHT,或CENTER。padx,pady類型:距離;說明:指定文本或圖象與按鈕邊框的間距。relief類型:常量;說明:邊框的裝飾。通常按鈕按下時是凹陷的,否則凸起。另外的可能取值有GROOVE,RIDGE,和FLAT。state類型:常量;說明:按鈕的狀態(tài):NORMAL,ACTIVE或DISABLED。默認值為NORMAL。takefocus類型:標志;說明:表明用戶可以Tab鍵來將焦點移到這個按鈕上。默認值是一個空字符串,意思是如果按鈕有按鍵綁定的話,它可以通過所綁定的按鍵來獲得焦點。text類型:字符串;說明

26、:顯示在按鈕中的文本。文本可以是多行。如果bitmaps或image選項被使用,則text選項被忽略。textvariable類型:變量;說明:與按鈕相關的Tk變量(通常是一個字符串變量)。如果這個變量的值改變,那么按鈕上的文本相應更新。underline類型:整數(shù);說明:在文本標簽中哪個字符加下劃線。默認值為-1,意思是沒有字符加下劃線。width,height類型:距離;說明:按鈕的尺寸。如果按鈕顯示文本,尺寸使用文本的單位。如果按鈕顯示圖象,尺寸以象素為單位(或屏幕的單位)。如果尺寸沒指定,它將根據(jù)按鈕的內(nèi)容來計算。wraplength類型:距離;說明:確定一個按鈕的文本何時調(diào)整為多行。

27、它以屏幕的單位為單位。默認不調(diào)整。MixinsTkinter模塊提供了相應于Tk中的各種窗口部件類型的類和一定數(shù)量的mixin和別的幫助類(mixin是一個類,被設計來使用多態(tài)繼承與其它的類結合)。當你使用Tkinter時,你不將直接訪問mixin類。一、實施mixins通過root窗口和窗口部件類,Misc類被用作mixin。它提供了大量的Tk和窗口相關服務,這些服務對所有Tkinter核心窗口部件者有效。這些通過委托完成;窗口部件僅僅直接請求適當?shù)膬?nèi)部對象。Wm類通過root窗口和頂級窗口部件類被用作mixin。通過委托它提供了窗口管理服務。使用委托像這樣簡化你的應用程序代碼:一旦你有一窗

28、口部件,你能夠使用這個窗口部件的實例的方法訪問Tkinter的所有部份。二、Geometry(幾何學)與mixinsGrid,Pack,Place這些類通過窗口部件類被用作mixins。通過委托,它們也提供了訪問不同幾何管理的支持。下面是GeometryMixins的列表及說明:管理器及說明:Grid:grid幾何管理器允許你通過在一個二維網(wǎng)格中組織窗口部件來創(chuàng)建一個類似表的版面。Pack:pack幾何管理器通過在一個幀中把窗口部件包裝到一個父部件中來創(chuàng)建一個版面。為了對窗口部件使用這個幾何管理器,我們在這個窗口部件上使用pack方法來集成。Place:place幾何管理器讓你顯式將一個窗口部

29、件放到給定的位置。要使用這個幾何管理器,需使用place方法。三、窗口部件配置管理Widget類使用geometrymixins來混合Misc類,并通過cget和configure方法來增加配置管理,也可以通過一個局部的字典接口。窗口部件的配置要配置一個窗口部件的外觀,你用選項比使用方法調(diào)用好。典型的選項包括text、color、size、command等等。對于處理選項,所有的核心窗口部件執(zhí)行同樣的配置接口:配置接口widgetclass(master,option=value,.)=widget說明:創(chuàng)建這個窗口部件的一個實例,這個實例作為給定的master的孩子,并且使用給定的選項。所有

30、的選項都有默認值,因此在簡單的情況下,你僅需要指定這個master。如果你想的話,你也可以不指定master;Tkinter這時會使用最近創(chuàng)建的root窗口作為master0注意這個name選項僅能在窗口部件被創(chuàng)建時設置。cget(option)=string說明:返回一個選項的當前值。選項的名字和返回值都是字符串。要得到name選項,使用str(widget)代替。configure(option=value,.),config(option=value,.)說明:設置一個或多個選項(作為關鍵字參數(shù)給定)。注意一些選項的名字與Python中的保留字相同(class,from等)。要使用這些作

31、為關鍵字參數(shù),僅需要在這些選項名后添加一下劃線(class_,from_)。注意你不能用此方法來設置name選項;name選項只能在窗口部件被創(chuàng)建時設置。為了方便起見,窗口部件也實現(xiàn)一個局部的字典接口。setitem_方法映射configure,而getitem_方法映射cget。你可以使用下面的語法來設置和查詢選項:value=widget HYPERLINK widgetoption=value注意每個賦值都導致一個對Tk的調(diào)用。如果你希望去改變多個選項,單獨地調(diào)用config或configure)去改變它們是一個好的主意。這下面的字典方法也適用于窗口部件:keys()=list說明:返回

32、窗口部件中所有可以被設置的選項的一個列表。name選項不包括在這個列表中(它不能通過字典接口被查詢或修改)。向后兼容性關鍵字參數(shù)在Python1.3時被引入。之前,使用原始的Python字典將選項傳遞給窗口構造器和configure方法。原代碼類似如下:self.button=Button(frame,text:QUIT,fg:red,command:frame.quit)self.button.pack(side:LEFT)關鍵字參數(shù)語法更優(yōu)雅和少容易發(fā)生錯誤。但是為了與存在的代碼兼容,Tkinter仍支持老的語法。在新的程序中你不應再用老的語法,即使是在某些情況下是很有吸引力的。例如,如果

33、你創(chuàng)建了一個定制的窗口部件,它需要沿它的父類傳遞配置選項,你的代碼可能如下:def_init_(self,master,*kw):Canvas.init(self,master,kw)#kw/是-個字典上面的代碼在當前版本的Tkinter下工作的很好,但是它在將來的版本下可能不工作。一個通常的辦法是使用apply函數(shù):def_init_(self,master,*kw):apply(Canvas._init,(self,master),kw)這個apply函數(shù)使用了一個函數(shù)(一個未約束的方法),一個帶參數(shù)的元組(它必須包括self,因為我們調(diào)用一個未約束的方法),一個可選的,提供了關鍵字參數(shù)的

34、字典。窗口部件的樣式之顏色所有的Tkinter標準窗口部件提供了一套樣式設置選項,這讓你可以去修改這些窗口部件的外觀如顏色、字體和其它的可視外觀。顏色大部份窗口部件都允許你指定窗口部件和文本的顏色,這可以使用background和foreground選項。要指定顏色,你可以使用顏色名,也可以使用紅、綠、藍顏色組合。1、顏色名Tkinter包括一個顏色數(shù)據(jù)庫,它將顏色名映射到相應的RGB值。這個數(shù)據(jù)庫包括了通常的名稱如Red,Green,Blue,Yellow,和LightBlue,也可使用外來的如Moccasin,PeachPuff等等。在Xwindow系統(tǒng)上,顏色名由Xserver定義。你能

35、夠找到一個名為xrgb.txt的文件,它包含了一個由顏色名和相應RGB值組成的列表。在Windows和Macintosh系統(tǒng)上,顏色名表內(nèi)建于Tk中。在Windows下,你可以使用Windows系統(tǒng)顏色(用戶可以通過控制面板來改變這些顏色):SystemActiveBorder,SystemActiveCaption,SystemAppWorkspace,SystemBackground,SystemButtonFace,SystemButtonHighlight,SystemButtonShadow,SystemButtonText,SystemCaptionText,SystemDisab

36、ledText,SystemHighlight,SystemHighlightText,SystemInactiveBorder,SystemInactiveCaption,SystemInactiveCaptionText,SystemMenu,SystemMenuText,SystemScrollbar,SystemWindow,SystemWindowFrame,SystemWindowTe。在Macintosh上,下面的系統(tǒng)顏色是有效的:SystemButtonFace,SystemButtonFrame,SystemButtonText,SystemHighlight,SystemH

37、ighlightText,SystemMenu,SystemMenuActive,SystemMenuActiveText,SystemMenuDisabled,SystemMenuText,SystemWindowBody顏色名是大小寫不敏感的。許多顏色名詞與詞之間有無格都有效。例如lightblue”,lightblue,和LightBlue都是同一顏色。2、RGB格式如果你需要顯式地指定顏色名,你可以使用如下格式的字符串:#RRGGBBRR,GG,BB分別是red,green和blue值的十六進制表示。下面的例子演示了如何將一個顏色三元組轉(zhuǎn)換為一個Tk顏色格式:tk_rgb=#%02x%

38、02x%02x%(128,192,200)Tk也支持用形如#RGB和rrrrggggbbbb去分別指定16和65536程度之間的值。你可以使用窗口部件的winfo_rgb方法來將一個代表顏色的字符串(名字或RGB格式)轉(zhuǎn)換為一個三元組:rgb=widget.winfo_rgb(red)red,green,blue=rgb0/256,rgb1/256,rgb2/256注意winfo_rgb返回16位的RGB值,范圍在065535之間。要將它們映射到更通用的0255范圍內(nèi),你必須將每個值都除以256(或?qū)⑺鼈兿蛴乙?位)。窗口部件的樣式之字體字體窗口部件允許你顯示文本和指定所使用的字體。所有的窗口

39、部件都提供了合理的默認值,你很少需要去為簡單元素如標簽和按鈕指定字體。字體通常使用font窗口部件選項指定。Tkinter支持一定數(shù)量的不同字體描述類型:*Fontdescriptors*User-definedfontnames*Systemfonts*XfontdescriptorsTk8.0以前的版本僅Xfont描述被支持。1、字體描述從Tk8.0開始,Tkinter支持獨立于平臺的字體描述。你可以使用元組來指定一個字體,這個元組包含了一個字體類型名字,一個以磅為單位的高度,代表一個或多個樣式的字符串。例如:(Times,10,bold)(Helvetica,10,bolditalic)

40、(Symbol,8)要得到默認的尺寸和類型,你可以給夢芭莎優(yōu)惠券出作為單一字符串的字體名。如果這個字體類型名字沒有包括空格,你也可以給這個字符串自身增加尺寸和樣式:Times10boldHelvetica10bolditalicSymbol8在大部份Windows平臺上存在如下有效的字體類名:Arial(相應于Helvetica),CourierNew(Courier),ComicSansMS,Fixedsys,MSSansSerif,MSSerif,Symbol,System,TimesNewRoman(Times),和Verdana:arial14points:rdliketohavean

41、argucouriernew12points:What?Prjcomicsonsms8points:PackmyboxwithfivendozenjugsofFixedsys9points:HereyouseesomeEnimssansSerif11points:Psickmyboxwithfivendozenmsserif16points:Thequickbrownfoxjiu127i;oivTO:tyupsrqiaout,oovdsp單system10points:Hello,Harry.Nowtherestheitimesnewroman16points:Tliattuniiverdan

42、a10points:ThequickbrownfoHjumps注意:如果這個字體類型名包含空格,你必須使用上面所描述的元組語法。有效的樣式有normal,bold,roman,italic,underline,andoverstrike。Tk8.0自動映射Courier,Helvetica,和Times到所有平臺上相應的本地字體類型名。此外,在Tk8.0下字體格式不會引起問題,如果Tk不能找出確切的匹配,它會試著找類似的字體,如果失敗,Tk就使用特定平臺的默認字體。Tk4.2在Windows下同樣支持這種字體描述。這兒有幾個限制,包括字體類型名必須在平臺上存在,并非這所有上面樣式名都存在(或它

43、們中的一些有不同的名字)。2、字體名此外,Tk8.0允許你去創(chuàng)建已命名的字體并且當為一個窗口部件指定字體時使用它們的名字。tkFont模塊提供一個Font類,這個類允許你去創(chuàng)建字體實例。你可以隨處使用這樣一個實例。你也可能使用一個字體實例來得到字體的量度,包括存在于那個字體中的字符串所站用的尺寸。tkFont.Font(family=Times,size=10,weight=tkFont.BOLD)tkFont.Font(family=Helvetica,size=10,weight=tkFont.BOLD,slant=tkFont.ITALIC)tkFont.Font(family=Symb

44、ol,size=8)如果你修改一個已命名的字體(使用config方法),這個改變將自動影響到所有使用這個字體的窗口部件。Font構造器支持下列的樣式選項(注意常量被定義在tkFont模塊中):樣式選項及說明:family選項類型:字符串說明:字體類型size選項類型:整型說明:以磅為單位的字體的尺寸。要以象素為單位的話,使用負值。weight選項類型:常量說明:字體的粗細。使用NORMAL或BOLD。默認為NORMAL。slant選項類型:常量說明:字體傾斜。使用NORMAL或ITALIC。默認為NORMAL。underline選項類型:標志說明:字體下劃線。如果1(true),字體加下劃線。

45、默認為0(false)。overstrike選項類型:標志說明:字體劃線。如果為1(true),貝I字體上有一條線;默認為O(false)。3、系統(tǒng)字體Tk也支持特定系統(tǒng)的字體名。在X下,這些通常是字體別名如fixed,6x10等等。在Windows下,這些包括ansi,ansifixed,device,oemfixed,system和systemfixed:ansi:Ididntknowantshadsixlegs,Marcusansifised:Anothermercilesssweepdevice:Welikedressingup,yeoemfixed:Oneda*Hick*themag

46、icpsystem:PrettystrongmeattherefromSamsystemfixed:SimonZincTrumpetHar在Macintosh上,系統(tǒng)字體名是application和system0注意:系統(tǒng)字體是字體名,不是字體類型名,它們不能與尺寸或樣式屬性結合。為了可移植性,盡可能避免使用這些名字。4、X字體描述X字體描述是如下格式的字符串(星號所代表的是無關字段。具體細節(jié)可查看Tk文檔或X手冊):-*-family-weight-slant-*-*-size-*-*-*-*-charset典型的字體類別如:Times,Helvetica,CourierorSymbol。w

47、eight可以是Bold或Normal。slant取值中R代表roman(正常),I代表italic,o代表團oblique(實際上等同于italic)。size是字體的高度,以十分之一磅為單位。一英寸72磅,但是一些低分辯率的顯示器的1磅較常規(guī)的大些,以便小字體能夠清晰顯示。charset(字符集)通常是ISO8859-1(ISOLatin1),但一些字體也使用其它的值。下面的描述的family取值是Times,weight取值是Bold,slant取值是R,size取值是120,charset取值是ISO8859-1:-*-Times-Bold-R-*-*-120-*-*-*-*-ISO8

48、859-1如果你不關心charset(字符集),或你使用如Symbol的字體(這種字體類別有特定的字符集),那么你可以使用一個星號作為描述的最后部分:-*-Symbol-*-*-*-*-80-*典型的Xserver至少支持Times,Helvetica,Courier等字體,size有8,10,12,14,18,和24磅,weight有normal,bold、italic(Times)或oblique(Helvetica,Courier)。大多數(shù)的服務器都有支持隨意查看字體。你可以使用如xlsfonts和xfontsel來檢查你所訪問的服務器的字體。這種類型的字體描述可以用在Windows和M

49、acintosh上。注意:如果你使用Tk4.2,你必須牢記字體類型必須是Windows所支持的一種。格式化文本雖然文本標簽和按鈕通常包含單行文本,但Tkinter也支持多行。要分離文本到多行,只需要在必要的地方插入換行符(n)。默認情況下,文本居中。你也可以通過設置justify選項為LEFT或RIGHT來改變文本的位置。默認值是CENTER。你也可以使用wraplenth選項來設置一個最大寬度,并且讓窗口部件自己調(diào)整多行文本。如果窗口部件太窄,它將使單個詞跨行。邊框所有的Tkinter窗口部件都有邊框(盡管對于某些窗口部件默認是不顯示邊框的)。邊框由一個可選的3D浮雕和一個焦點高亮區(qū)域組成。

50、一、relief這個relief設置控制如何繪制窗口部件的3D邊框:borderwidth(或bd)是邊框的寬度,以象素為單位。大多數(shù)的窗口部件都有一個默認的1或2象素的邊框?qū)挾?。relief的取值可以有如下幾種:SUNKEN,RAISED,GROOVE,RIDGE,andFLAT。二、焦點咼亮這個高亮設置控制如何指示窗口部件(或它的孩子之一)獲得了按鍵焦點。在大多數(shù)情況下,這個高亮區(qū)域是在relief外面的邊框。下面的選項控制如何繪制另外的邊框:highlightcolor用來繪制當窗口部件獲得按鍵焦點的高亮區(qū)域。通常是黑色或別的明顯的對比色。highlightbackground用來繪制當

51、窗口部件沒獲得焦點的高亮區(qū)域。通常與窗口部件的背景色一樣。highlightthickness選項是高亮區(qū)域的寬度,以象素為單位。對于那些獲得按鍵焦點的窗口部件通常是1或2個象素三、光標這個cursor選項控制當鼠標移動到窗口部件上時使用哪種鼠標光標。如果這個選項沒有設置,這個窗口部件將使用和它父親一樣的鼠標指針。注意:一些窗口部件(包括Text和Entry窗口部件)默認設置cursor選項。F面是一些內(nèi)建的鼠標光標的樣式:XXT工令甲oa8+冏咅申b處薩I-nl寰m HYPERLINK l bookmark2 o Current Document T|TSBd小I冋嫁礦會+廠T-I(zIIK

52、丄畫*色)弋奚+?*=m1tIX0寰戻才不T常事件和綁定正如早些時候,一個Tkinter應用程序大部分時間花費在事件循環(huán)中(通過mainloop方法進入事件循環(huán))。事件來自不同的消息,包括用戶按下按鍵和鼠標操作,和來自于窗口管理器的重繪事件(在許多情況下不是由用戶直接引起)。Tkinter提供了強大的機制讓你可以自己處理事件。對于任一窗口部件,你可以為事件綁定Python函數(shù)和方法:widget.bind(event,handler)如果發(fā)生在窗口部件中的事件與所描述的事件匹配,那么所給定的handler(處理器)將被描述這個事件的對象調(diào)用。下面是一個捕獲窗口中的點擊的例子:#File:bin

53、dl.pyfromTkinterimport*root=Tk()defcallback(event):printclickedat,event.x,event.yframe=Frame(root,width=100,height=100)frame.bind(,callback)frame.pack()root.mainloop()上面這個例子,我們使用了frame窗口部件的bind方法為一個事件調(diào)用綁定了一個回調(diào)函數(shù)。運行這個程序并在所顯示的窗口中點擊。每次點擊,在控制臺窗口中都會打印一條如clickedat4463這樣的信息。一、事件事件以字符串的形式給出,使用特定的語法:vmodifie

54、r-type-detailtype字段是事件區(qū)分符中最重要的部分。它指定了我們希望去綁定的事件種類,如用戶的按鈕、按鍵動作,或如Enter,Configure等窗口管理器事件。modifier和detail字段被用來給出附加的信息,在多數(shù)情況下可以不用。這兒也有不同的方法去簡化事件字符串;例如,要匹配一個鍵盤鍵,你可以不用尖括號而只使用這個鍵。當然,除非它的一個空格或一個尖括號。下面我們給出最常用的事件及其說明:事件說明:鼠標按鈕在窗口部件上按下obutton1是鼠標左按鈕,button2是鼠標中間的按鈕(如果有的話),button3是鼠標右按鈕。當你在一窗口部件上按下一個鼠標按鈕時,Tkin

55、ter將自動抓取鼠標指針,在鼠標按鈕被按下時鼠標事件將被發(fā)送給當前窗口部件。鼠標指針相對于窗口部件的當前位置被提供給傳遞給回調(diào)函數(shù)的event對象的x和y成員中。你可以用ButtonPress代替Button,或只用(這等同于vButton-1,vButtonPress-1)。vB1-Motion事件說明:鼠標移動并且鼠標左鍵被按住(B2代表鼠標中間按鍵,B3代表鼠標右按鍵)。鼠標指針相對于窗口部件的當前位置被提供給傳遞給回調(diào)函數(shù)的event對象的x和y成員中。事件說明:鼠標左鍵釋放。鼠標指針相對于窗口部件的當前位置被提供給傳遞給回調(diào)函數(shù)的event對象的x和y成員中。vDouble-Butt

56、on-1事件說明:鼠標左鍵雙擊。你可以用Triple代替Doubleo事件說明:鼠標指針位于窗口部件中(這個事件不代表回車)vLeave事件說明:鼠標指針離開窗口部件。vReturn事件說明:用戶按下Enter鍵。你可以綁定到鍵盤上的所有實際上的鍵。對于通常的102鍵盤,這專用鍵有Cancel,Backspace,Tab,Enter,Shift_L,Control_L,Alt_L,Pause,Caps_Lock,Escape,PageUp,PageDown,End,Home,Left,Up,Right,Down,Print,Insert,Delete,F1,F2,F3,F4,F5,F6,F7,

57、F8,F9,F10,F11,F12,Num_Lock,和Scroll_Lock。Key事件說明:用戶按下任一鍵。這個鍵被提供給傳遞給回調(diào)函數(shù)的event對象的char成員中。a事件說明:用戶鍵入a。大部分的可打印字符都可替換a。這個例外是空格(space)和小于(less)。vShift-Up事件說明:用戶按下向上箭頭,同時按住shift鍵。你可以用Alt,Control代替shift。Configure事件說明:窗口部件的尺寸改變(某些平臺上是位置改變)。新的尺寸被提供給傳遞給回調(diào)函數(shù)的event對象的width和height屬性中。二、Event對象Event對象是一個標準的Python對

58、象實例,它的屬性及說明如下:widget說明:產(chǎn)生事件的窗口部件。這是一個有效的Tkinter窗口部件的實例,不是一個名字。這個屬性為所有事件設置。x,y說明:當前鼠標指針的位置,以象素為單位。x_root,y_root說明:當前鼠標相對于屏幕左上方的位置,以象素為單位。char說明:字符代碼(僅鍵盤事件),是一個字符串。keysym說明:鍵的符號(僅鍵盤事件)。keycode說明:鍵的代碼(僅鍵盤事件)。num說明:鼠標按鈕的數(shù)字(僅鼠標按鈕事件)。width,height說明:窗口部件的新尺寸,以象素為單位(僅Configure事件)type說明:事件類型。為了兼容性,你應堅持使用char

59、,height,width,x,y,x_root,y_root,和widget除非你確切地知道你在做什么。三、實例和類綁定上面的例子中我們使用bind方法創(chuàng)建一個實例綁定。這意味著這個綁定僅應用于單個窗口部件;如果你創(chuàng)建新的frame,它們將不繼承這個綁定。但是Tkinter也允許你在類和應用程序?qū)由蟿?chuàng)建綁定;事實上,你可以在下面四個不同的層上創(chuàng)建綁定:*窗口部件實例,使用bind方法。*窗口部件的頂層窗口(頂層或root),也使用bind方法。*窗口部件類,使用bind_class方法(這是Tkinter提供的標準綁定)。*整個應用程序,使用bind_all方法。例如,你可以使用bind_all來為F1鍵創(chuàng)建一個到應用程序的綁定,這樣你就可以在這個應用程序的任何地方提供幫助。但是如果你為同一個鍵創(chuàng)建多個綁定或提供重疊的綁定會發(fā)生什么呢?首先,對于上面四種層別之一的任何一種,Tkinter選擇有效綁定的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論