免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Python實(shí)例講解——wxPython的基本控件實(shí)現(xiàn)

使用按鈕工作

 

wxPython中有很多不同類(lèi)型的按鈕。這一節(jié),我們將討論文本按鈕、位圖按鈕、開(kāi)關(guān)按鈕(toggle buttons)和通用(generic)按鈕。

 

如何生成一個(gè)按鈕?

 

在第一部分(part 1)中,我們已經(jīng)說(shuō)明了幾個(gè)按鈕的例子,所以這里我們只簡(jiǎn)短的涉及它的一些基本的東西。圖7.4顯示了一個(gè)簡(jiǎn)單的按鈕。

 

圖7.4

 

使用按鈕是非常簡(jiǎn)單的。例7.4顯示了該簡(jiǎn)單按鈕的代碼。

 

Python代碼  
  1. import wx  
  2.   
  3. class ButtonFrame(wx.Frame):  
  4.     def __init__(self):  
  5.         wx.Frame.__init__(selfNone, -1'Button Example',   
  6.                 size=(300100))  
  7.         panel = wx.Panel(self, -1)  
  8.         self.button = wx.Button(panel, -1"Hello", pos=(5020))  
  9.         self.Bind(wx.EVT_BUTTON, self.OnClick, self.button)  
  10.         self.button.SetDefault()  
  11.   
  12.     def OnClick(self, event):  
  13.         self.button.SetLabel("Clicked")  
  14.           
  15. if __name__ == '__main__':  
  16.     app = wx.PySimpleApp()  
  17.     frame = ButtonFrame()  
  18.     frame.Show()  
  19.     app.MainLoop()  
 

wx.Button的構(gòu)造函數(shù)類(lèi)似于我們已經(jīng)看到過(guò)的,如下所示:

wx.Button(parent, id, label, pos, size=wxDefaultSize, style=0, validator, name="button")

 

參數(shù)label是顯示在按鈕上的文本。它可以在程序運(yùn)行期間使用SetLabel()來(lái)改變,并且使用GetLabel()來(lái)獲取。另外兩個(gè)有用的方法是GetDefaultSize()SetDefault()。GetDefaultSize()返回系統(tǒng)默認(rèn)按鈕的尺寸(對(duì)于框架間的一致性是有用的);SetDefault()設(shè)置按鈕為對(duì)話框或框架的默認(rèn)按鈕。默認(rèn)按鈕的繪制不同于其它按鈕,它在對(duì)話框獲得焦點(diǎn)時(shí),通常按下回車(chē)鍵被激活。

 

wx.Button類(lèi)有一個(gè)跨平臺(tái)的樣式標(biāo)記:wx.BU_EXACTFIT。如果定義了這個(gè)標(biāo)記,那么按鈕就不把系統(tǒng)默認(rèn)的尺寸作為最小的尺寸,而是把能夠恰好填充標(biāo)簽的尺寸作為最小尺寸。如果本地窗口部件支持的話,你可以使用標(biāo)記wx.BU_LEFT, wx.BU_RIGHT, wx.BU_TOP, 和 wx.BU_BOTTOM來(lái)改變按鈕中標(biāo)簽的對(duì)齊方式。每個(gè)標(biāo)記對(duì)齊標(biāo)簽到邊,該邊你根據(jù)標(biāo)記的名字可以知道。正如我們?cè)诘谝徊糠种兴懻撨^(guò)的,wx.Button在被敲擊時(shí)觸發(fā)一個(gè)命令事件,事件類(lèi)型是EVT_BUTTON。

 

如何生成一個(gè)位圖按鈕?

 

有時(shí)候,你可能想在你的按鈕上顯示一個(gè)圖片,而非一個(gè)文本標(biāo)簽,如圖7.5所示。

 

 

wxPython中,使用類(lèi)wx.BitmapButton來(lái)創(chuàng)建一個(gè)位圖按鈕。處理一個(gè)wx.BitmapButton的代碼是與通用按鈕的代碼非常類(lèi)似的,例7.5顯示了產(chǎn)生7.5的代碼。

 

例7.5 創(chuàng)建一個(gè)位圖按鈕

 

 

Python代碼  
  1. import wx  
  2.   
  3. class BitmapButtonFrame(wx.Frame):  
  4.     def __init__(self):  
  5.         wx.Frame.__init__(selfNone, -1'Bitmap Button Example',   
  6.                 size=(200150))  
  7.         panel = wx.Panel(self, -1)  
  8.         bmp = wx.Image("bitmap.bmp", wx.BITMAP_TYPE_BMP).ConvertToBitmap()  
  9.         self.button = wx.BitmapButton(panel, -1, bmp, pos=(1020))  
  10.         self.Bind(wx.EVT_BUTTON, self.OnClick, self.button)  
  11.         self.button.SetDefault()  
  12.         self.button2 = wx.BitmapButton(panel, -1, bmp, pos=(10020),   
  13.             style=0)  
  14.         self.Bind(wx.EVT_BUTTON, self.OnClick, self.button2)  
  15.   
  16.     def OnClick(self, event):  
  17.         self.Destroy()  
  18.           
  19. if __name__ == '__main__':  
  20.     app = wx.PySimpleApp()  
  21.     frame = BitmapButtonFrame()  
  22.     frame.Show()  
  23.     app.MainLoop()  
 

與普通按鈕的主要的區(qū)別是你需要提供一個(gè)位圖,而非一個(gè)標(biāo)簽。否則,構(gòu)造器和大部分代碼是與文本按鈕的例子相同的。位圖按鈕在被敲擊時(shí)同樣產(chǎn)生EVT_BUTTON事件。

 

關(guān)于位圖按鈕有幾個(gè)有趣的特性。首先,一個(gè)樣式標(biāo)記wx.BU_AUTODRAW,它是默認(rèn)的。如果該標(biāo)記是打開(kāi)的,那么位圖將帶有一個(gè)3D的邊框,這使它看起來(lái)像一個(gè)文本按鈕(圖7.5中的左按鈕),并且按鈕比原位圖大幾個(gè)像素。如果該標(biāo)記是關(guān)閉的,則位圖被簡(jiǎn)單地繪制為按鈕而沒(méi)有邊框。通過(guò)設(shè)置style=0使圖7.5中右邊的按鈕關(guān)閉默認(rèn)設(shè)置,它沒(méi)有了3D的效果。

 

默認(rèn)情況下,給wxPython傳遞單個(gè)位圖作為主顯示的位圖,在當(dāng)按鈕被按下或獲得焦點(diǎn)或無(wú)效時(shí),wxPython自動(dòng)創(chuàng)建一個(gè)標(biāo)準(zhǔn)的派生自主顯示的位圖的位圖作為此時(shí)顯示在按鈕上的位圖。如果自動(dòng)創(chuàng)建的位圖不是你想要的,你可以使用下面的方法: SetBitmapDisabled(), SetBitmapFocus(),SetBitmapLabel(), 和SetBitmap-Selected()顯式地告訴wxPython你要使用哪個(gè)位圖。這些方法都要求一個(gè)wx.Bitmap對(duì)象作為參數(shù),并且它們都有相應(yīng)的get*()方法。

 

你不能通過(guò)使用標(biāo)準(zhǔn)的wxWidgets C++庫(kù)來(lái)合并一個(gè)位圖和文本。你可以創(chuàng)建一個(gè)包含文本的位圖。然而,正如我們將在通用按鈕問(wèn)題討論中所看到的,wxPython有額外的方法來(lái)實(shí)現(xiàn)這一合并行為。

 

 

=== 如何創(chuàng)建開(kāi)關(guān)按鈕(toggle button)?===

 

你可以使用wx.ToggleButton創(chuàng)建一個(gè)開(kāi)關(guān)按鈕(toggle button)。開(kāi)關(guān)按鈕(toggle button)看起來(lái)十分像文本按鈕,但它的行為更像復(fù)選框,它的選擇或非選擇狀態(tài)是可視化的。換句話說(shuō),當(dāng)你按下一個(gè)開(kāi)關(guān)按鈕(toggle button)時(shí),它將一直保持被按下的狀態(tài)直到你再次敲擊它。

 

wx.ToggleButton與父類(lèi)wx.Button之間只有丙個(gè)區(qū)別:

1、當(dāng)被敲擊時(shí),wx.ToggleButton發(fā)送一個(gè)EVT_TOGGLEBUTTON事件。

2、wx.ToggleButtonGetValue()SetValue()方法,它們處理按鈕的二進(jìn)制狀態(tài)。

 

開(kāi)關(guān)按鈕(toggle button)是有用的,它相對(duì)于復(fù)選框是另一好的選擇,特別是在工具欄中。記住,你不能使用wxWidgets提供的對(duì)象來(lái)將開(kāi)關(guān)按鈕(toggle button)與位圖按鈕合并,但是wxPython有一個(gè)通用按鈕類(lèi),它提供了這種行為,我們將在下一節(jié)對(duì)其作討論。

 

什么是通用按鈕,我為什么要使用它?

 

通用按鈕是一個(gè)完全用Python重新實(shí)現(xiàn)的一個(gè)按鈕窗口部件,回避了本地系統(tǒng)窗口部件的用法。它的父類(lèi)是wx.lib.buttons. GenButton。通用按鈕有通用位圖和切換按鈕。

 

這兒有幾個(gè)使用通用按鈕的原因:

1、通用按鈕比本地按鈕具有更好的跨平臺(tái)的外觀。另一方面,通用按鈕可能在具體的系統(tǒng)上看起來(lái)與本地按鈕有些微的不同。

2、使用通用按鈕,你對(duì)它的外觀有更多的控制權(quán),并且能改變屬性,如3D斜面的寬度和顏色,而這對(duì)于本地控件可能是不允許的。

3、通用按鈕類(lèi)允許特性的合并,而wxWidget按鈕不行。比如GenBitmapTextButton允許文本標(biāo)簽和位圖的組合,GenBitmapToggleButton實(shí)現(xiàn)一個(gè)位圖切換按鈕。

4、如果你正在創(chuàng)建一個(gè)按鈕類(lèi),使用通用按鈕是較容易的。由于其代碼和參數(shù)是用Python寫(xiě)的,所以當(dāng)創(chuàng)建一個(gè)新的子類(lèi)的時(shí)候,對(duì)于檢查和覆蓋,它們的可用性更好。

 

圖7.6顯示了實(shí)際的通用按鈕和常規(guī)按鈕的對(duì)照。

 

圖7.6

 

例7.6顯示了產(chǎn)生圖7.6的代碼。第二個(gè)導(dǎo)入語(yǔ)句:import wx.lib.buttons as buttons,是必須的,它使得通用按鈕類(lèi)可用。

 

例7.6 創(chuàng)建和使用wxPython的通用按鈕

 

Python代碼  
  1. import wx  
  2. import wx.lib.buttons as buttons  
  3.   
  4. class GenericButtonFrame(wx.Frame):  
  5.     def __init__(self):  
  6.         wx.Frame.__init__(selfNone, -1'Generic Button Example',   
  7.                 size=(500350))  
  8.         panel = wx.Panel(self, -1)  
  9.   
  10.         sizer = wx.FlexGridSizer(132020)  
  11.         b = wx.Button(panel, -1"A wx.Button")  
  12.         b.SetDefault()  
  13.         sizer.Add(b)  
  14.   
  15.         b = wx.Button(panel, -1"non-default wx.Button")  
  16.         sizer.Add(b)  
  17.         sizer.Add((10,10))  
  18.   
  19.         b = buttons.GenButton(panel, -1'Genric Button')#基本的通用按鈕  
  20.         sizer.Add(b)  
  21.   
  22.         b = buttons.GenButton(panel, -1'disabled Generic')#無(wú)效的通用按鈕  
  23.         b.Enable(False)  
  24.         sizer.Add(b)  
  25.   
  26.         b = buttons.GenButton(panel, -1'bigger')#自定義尺寸和顏色的按鈕  
  27.         b.SetFont(wx.Font(20, wx.SWISS, wx.NORMAL, wx.BOLD, False))  
  28.         b.SetBezelWidth(5)  
  29.         b.SetBackgroundColour("Navy")  
  30.         b.SetForegroundColour("white")  
  31.         b.SetToolTipString("This is a BIG button...")  
  32.         sizer.Add(b)    
  33.   
  34.         bmp = wx.Image("bitmap.bmp", wx.BITMAP_TYPE_BMP).ConvertToBitmap()  
  35.         b = buttons.GenBitmapButton(panel, -1, bmp)#通用位圖按鈕  
  36.         sizer.Add(b)  
  37.   
  38.         b = buttons.GenBitmapToggleButton(panel, -1, bmp)#通用位圖開(kāi)關(guān)按鈕  
  39.         sizer.Add(b)  
  40.           
  41.         b = buttons.GenBitmapTextButton(panel, -1, bmp, "Bitmapped Text",  
  42.                 size=(17575))#位圖文本按鈕  
  43.         b.SetUseFocusIndicator(False)  
  44.         sizer.Add(b)  
  45.   
  46.         b = buttons.GenToggleButton(panel, -1"Toggle Button")#通用開(kāi)關(guān)按鈕  
  47.         sizer.Add(b)  
  48.   
  49.         panel.SetSizer(sizer)  
  50.   
  51. if __name__ == '__main__':  
  52.     app = wx.PySimpleApp()  
  53.     frame = GenericButtonFrame()  
  54.     frame.Show()  
  55.     app.MainLoop()    
 

在例7.6中,通用按鈕的用法非常類(lèi)似于常規(guī)按鈕。通用按鈕產(chǎn)生與常規(guī)按鈕同樣的EVT_BUTTONEVT_TOGGLEBUTTON事件。通用按鈕引入了GetBevelWidth()SetBevelWidth()方法來(lái)改變3D斜面效果。它們用在了圖7.6中大按鈕上。

 

通用位圖按鈕類(lèi)GenBitmapButton工作的像標(biāo)準(zhǔn)的wxPython版本。在構(gòu)造器中。GenBitmapTextButton要求先要一個(gè)位圖,然后是文本。通用類(lèi)GenToggleButton,GenBitmapToggleButton,和 GenBitmapTextToggleButton與非開(kāi)關(guān)版的一樣,并且對(duì)于處理按鈕的開(kāi)關(guān)狀態(tài)響應(yīng)于GetToggle()SetToggle()。

 

在下一節(jié),我們將討論關(guān)于使你的用戶能夠輸入或觀看一個(gè)數(shù)字值的方案。

 

輸入并顯示數(shù)字

 

有時(shí)你想要顯示圖形化的數(shù)字信息,或你想讓用戶不必使用鍵盤(pán)來(lái)輸入一個(gè)數(shù)字量。在這一節(jié),我們將瀏覽wxPython中用于數(shù)字輸入和顯示的工具:滑塊(slider)、微調(diào)控制框和顯示量度的標(biāo)尺。

 

如何生成一個(gè)滑塊?

 

滑塊是一個(gè)窗口部件,它允許用戶通過(guò)在該控件的尺度內(nèi)拖動(dòng)指示器來(lái)選擇一個(gè)數(shù)值。在wxPython中,該控件類(lèi)是wx.Slider,它包括了滑塊的當(dāng)前值的只讀文本的顯示。圖7.7顯示了水平和垂直滑塊的例子。

 

圖7.7

 

滑塊的基本使用是十分簡(jiǎn)單的,但是你可以增加許多事件。

 

如何使用滑塊

 

例7.7是產(chǎn)生圖7.7的例子。

 

例7.7 水平和垂直滑塊的顯示代碼

 

 

Python代碼  
  1. import wx   
  2.   
  3. class SliderFrame(wx.Frame):  
  4.     def __init__(self):  
  5.         wx.Frame.__init__(selfNone, -1'Slider Example',   
  6.                 size=(300350))  
  7.         panel = wx.Panel(self, -1)  
  8.         self.count = 0  
  9.         slider = wx.Slider(panel, 100251100, pos=(1010),  
  10.                 size=(250, -1),  
  11.                 style=wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_LABELS )  
  12.         slider.SetTickFreq(51)  
  13.         slider = wx.Slider(panel, 100251100, pos=(12570),  
  14.                 size=(-1250),  
  15.                 style=wx.SL_VERTICAL | wx.SL_AUTOTICKS | wx.SL_LABELS )  
  16.         slider.SetTickFreq(201)  
  17.           
  18. if __name__ == '__main__':  
  19.     app = wx.PySimpleApp()  
  20.     frame = SliderFrame()  
  21.     frame.Show()  
  22.     app.MainLoop()   
 

 

通常,當(dāng)你使用wx.Slider類(lèi)時(shí),所有你所需要的就是一個(gè)構(gòu)造函數(shù),它與別的調(diào)用不同,如下所示:

wx.Slider(parent, id, value, minValue, maxValue, pos=wxDefaultPosition, size=wx.DefaultSize, style=wx.SL_HORIZONTAL, validator=wx.DefaultValidator, name="slider")

value是滑塊的初始值,而minValuemaxValue是兩端的值。

 

使用滑塊樣式工作

 

滑塊的樣式管理滑塊的位置和方向,如下表7.9所示。

 

表7.9 wx.Slider的樣式

 

wx.SL_AUTOTICKS:如果設(shè)置這個(gè)樣式,則滑塊將顯示刻度??潭乳g的間隔通過(guò)SetTickFreq方法來(lái)控制。

wx.SL_HORIZONTAL:水平滑塊。這是默認(rèn)值。

wx.SL_LABELS:如果設(shè)置這個(gè)樣式,那么滑塊將顯示兩頭的值和滑塊的當(dāng)前只讀值。有些平臺(tái)可能不會(huì)顯示當(dāng)前值。

wx.SL_LEFT:用于垂直滑塊,刻度位于滑塊的左邊。

wx.SL_RIGHT:用于垂直滑塊,刻度位于滑塊的右邊。

wx.SL_TOP:用于水平滑塊,刻度位于滑塊的上部。

wx.SL_VERTICAL:垂直滑塊。

 

如果你想通過(guò)改變滑塊中的值來(lái)影響你的應(yīng)用程序中的其它的部分,那么這兒有幾個(gè)你可使用的事件。這些事件與窗口滾動(dòng)條所發(fā)出的是相同的,詳細(xì)的說(shuō)明參見(jiàn)第8章的滾動(dòng)條部分。

 

表7.10列出了你可用于滑塊的Set*()方法。每個(gè)Set*()方法都有一個(gè)對(duì)應(yīng)的Get方法——Get方法的描述參考其對(duì)應(yīng)的Set*()方法。

 

表7.10

 

GetRange() SetRange(minValue, maxValue):設(shè)置滑塊的兩端值。

GetTickFreq() SetTickFreq(n, pos):使用參數(shù)n設(shè)置刻度的間隔。參數(shù)pos沒(méi)有被使用,但是它仍然是必要的,將它設(shè)置為1。

GetLineSize() SetLineSize(lineSize):設(shè)置你每按一下方向鍵,滑塊所增加或減少的值。

GetPageSize() SetPageSize(pageSize):設(shè)置你每按一下PgUpPgDn鍵,滑塊所增加或減少的值。

GetValue() SetValue(value):設(shè)置滑塊的值。

 

盡管滑塊提供了一個(gè)可能范圍內(nèi)的值的快速的可視化的表示,但是它們也有兩個(gè)缺點(diǎn)。其一是它們占據(jù)了許多的空間,另外就是使用鼠標(biāo)精確地設(shè)置滑塊是困難的。下面我們將討論的微調(diào)控制器解決了上面的這兩個(gè)問(wèn)題。

 

如何得到那些靈巧的上下箭頭按鈕?

 

微調(diào)控制器是文本控件和一對(duì)箭頭按鈕的組合,它用于調(diào)整數(shù)字值,并且在你要求一個(gè)最小限度的屏幕空間的時(shí)候,它是替代滑塊的最好選擇。圖7.8顯示了wxPython的微調(diào)控制器控件。

 

圖7.8

 

wxPython中,類(lèi)wx.SpinCtrl管理微調(diào)按鈕和相應(yīng)的文本顯示。在接下來(lái)的部分,我們將創(chuàng)建一個(gè)微調(diào)控制器。

 

如何創(chuàng)建一個(gè)微調(diào)控制器

 

要使用wx.SpinCtrl來(lái)改變值,可通過(guò)按箭頭按鈕或通過(guò)在文本控件中輸入。鍵入的非數(shù)字的文本將被忽略,盡管控件顯示的是鍵入的非數(shù)字的文本。一個(gè)超出范圍的值將被認(rèn)作是相應(yīng)的最大或最小值,盡管顯示的是你輸入的值。例7.8顯示了wx.SpinCtrl的用法。

 

例7.8 使用wx.SpinCtrl

 

Python代碼  
  1. import wx  
  2.   
  3. class SpinnerFrame(wx.Frame):  
  4.     def __init__(self):  
  5.         wx.Frame.__init__(selfNone, -1'Spinner Example',   
  6.                 size=(100100))  
  7.         panel = wx.Panel(self, -1)  
  8.         sc = wx.SpinCtrl(panel, -1, "", (3020), (80, -1))  
  9.         sc.SetRange(1,100)  
  10.         sc.SetValue(5)  
  11.   
  12. if __name__ == '__main__':  
  13.     app = wx.PySimpleApp()  
  14.     SpinnerFrame().Show()  
  15.     app.MainLoop()     
 

 

幾乎微調(diào)控件所有復(fù)雜的東西都是在其構(gòu)造函數(shù)中,其構(gòu)造函數(shù)如下:

 

Python代碼  
  1. wx.SpinCtrl(parent, id=-1, value=wx.EmptyString, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.SP_ARROW_KEYS, min=0, max=100, initial=0, name="wxSpinCtrl")   
 

 

參數(shù)value是虛設(shè)的。使用initial參數(shù)來(lái)設(shè)置該控件的值,并使用minmax來(lái)設(shè)置該控件的范圍。

對(duì)于wx.SpinCtrl有兩個(gè)樣式標(biāo)記。默認(rèn)樣式是wx.SP_ARROW_KEYS,它允許用戶通過(guò)鍵盤(pán)上的上下箭頭鍵來(lái)改變控件的值。樣式wx.SP_WRAP使得控件中的值可以循環(huán)改變,也就是說(shuō)你通過(guò)箭頭按鈕改變控件中的值到最大或最小值時(shí),如果再繼續(xù),值將變?yōu)樽钚』蜃畲?,從一個(gè)極端到另一個(gè)極端。

 

你也可以捕獲EVT_SPINCTRL事件,它在當(dāng)控件的值改變時(shí)產(chǎn)生(即使改變是直接由文本輸入引起的)。如果文本改變了,將引發(fā)一個(gè)EVT_TEXT事件,就如同你使用一個(gè)單獨(dú)的文本控件時(shí)一樣。

 

如例7.8所示,你可以使用SetRange(minVal, maxVal)SetValue(value)方法來(lái)設(shè)置范圍和值。SetValue()函數(shù)要求一個(gè)字符串或一個(gè)整數(shù)。要得到值,使用方法:GetValue()(它返回一個(gè)整數(shù)), GetMin(), 和 GetMax()。

 

當(dāng)你需要對(duì)微調(diào)控制器的行為有更多的控制時(shí),如允許浮點(diǎn)數(shù)或一個(gè)字符串的列表,你可以把一個(gè)wx.SpinButton和一個(gè)wx.TextCtrl放到一起,并在它們之間建立一個(gè)聯(lián)系。然后捕獲來(lái)自wx.SpinButton的事件,并更新wx.TextCtrl中的值。

 

如何生成一個(gè)進(jìn)度條?

 

如果你只想圖形化地顯示一個(gè)數(shù)字值而不允許用戶改變它,那么使用相應(yīng)的wxPython窗口部件wx.Gauge。 相關(guān)的例子就是圖7.9所顯示的進(jìn)度條。

 

圖7.9

 

例7.9顯示了產(chǎn)生圖7.9的代碼。與本章中許多別的例子不同的是,這里我們?cè)黾恿艘粋€(gè)事件處理器。下面的代碼在空閉時(shí)調(diào)整標(biāo)尺的值,使得值周而復(fù)始的變化。

 

例7.9 顯示并更新一個(gè)wx.Gauge

 

Python代碼  
  1. import wx  
  2.   
  3. class GaugeFrame(wx.Frame):  
  4.     def __init__(self):  
  5.         wx.Frame.__init__(selfNone, -1'Gauge Example',   
  6.                 size=(350150))  
  7.         panel = wx.Panel(self, -1)  
  8.         self.count = 0  
  9.         self.gauge = wx.Gauge(panel, -150, (2050), (25025))  
  10.         self.gauge.SetBezelFace(3)  
  11.         self.gauge.SetShadowWidth(3)  
  12.         self.Bind(wx.EVT_IDLE, self.OnIdle)  
  13.   
  14.     def OnIdle(self, event):  
  15.         self.count = self.count + 1  
  16.         if self.count  == 50:  
  17.             self.count = 0  
  18.         self.gauge.SetValue(self.count)  
  19.           
  20. if __name__ == '__main__':  
  21.     app = wx.PySimpleApp()  
  22.     GaugeFrame().Show()  
  23.     app.MainLoop()    
 

wx.Gauge的構(gòu)造函數(shù)類(lèi)似于其它的數(shù)字的窗口部件:

 

Python代碼  
  1. wx.Gauge(parent, id, range, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.GA_HORIZONTAL, validator=wx.DefaultValidator, name="gauge")   
 

 

當(dāng)你使用參數(shù)range來(lái)指定數(shù)字值時(shí),該值代表標(biāo)尺的上限,而下限總是0。默認(rèn)樣式wx.GA_HORIZONTAL提供了一個(gè)水平條。要將它旋轉(zhuǎn)90度,使用wx.GA_VERTICAL樣式。如果你是在Windows上,那么樣式wx.GA_PROGRESSBAR給你的是來(lái)自Windows工具包的本地化的進(jìn)度條。

 

作為一個(gè)只讀控件,wx.Gauge沒(méi)有事件。然而,它的屬性你可以設(shè)置。你可以使用GetValue(), Set-Value(pos), GetRange(), 和 SetRange(range)來(lái)調(diào)整它的值和范圍。如果你是在Windows上,并且沒(méi)有使用本地進(jìn)度條樣式,那么你可以使用SetBezelFace(width) and SetShadowWidth()來(lái)改變3D效果的寬度。

 

給用戶以選擇

 

幾乎每個(gè)應(yīng)用程序都要求用戶在一套預(yù)先定義的選項(xiàng)間進(jìn)行選擇。在wxPython中,有多種窗口部件幫助用戶處理這種任務(wù),包括復(fù)選框、單選按鈕、列表框和組合框。接下來(lái)的部分將介紹這些窗口部件。

 

如何創(chuàng)建一個(gè)復(fù)選框?

 

復(fù)選框是一個(gè)帶有文本標(biāo)簽的開(kāi)關(guān)按鈕。復(fù)選框通常成組的方式顯示,但是每個(gè)復(fù)選框的開(kāi)關(guān)狀態(tài)是相互獨(dú)立的。當(dāng)你有一個(gè)或多個(gè)需要明確的開(kāi)關(guān)狀態(tài)的選項(xiàng)時(shí),可以使用復(fù)選框。圖7.10顯示了一組復(fù)選框。

 

圖7.10

 

wxPython中復(fù)選框很容易使用。它們是wx.CheckBox類(lèi)的實(shí)例,并且通過(guò)把它們一起放入一個(gè)父容器中可以讓它們?cè)谝黄痫@示。例7.10提供了生成圖7.10的代碼。

 

例7.10 插入三個(gè)復(fù)選框到一個(gè)框架中

 

Python代碼  
  1. import wx  
  2.   
  3. class CheckBoxFrame(wx.Frame):  
  4.     def __init__(self):  
  5.         wx.Frame.__init__(selfNone, -1'Checkbox Example',   
  6.                 size=(150200))  
  7.         panel = wx.Panel(self, -1)  
  8.         wx.CheckBox(panel, -1"Alpha", (3540), (15020))  
  9.         wx.CheckBox(panel, -1"Beta", (3560), (15020))  
  10.         wx.CheckBox(panel, -1"Gamma", (3580), (15020))  
  11.   
  12. if __name__ == '__main__':  
  13.     app = wx.PySimpleApp()  
  14.     CheckBoxFrame().Show()  
  15.     app.MainLoop()    
 

wx.CheckBox有一個(gè)典型的wxPython構(gòu)造函數(shù):

 

Python代碼  
  1. wx.CheckBox(parent, id, label, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, name="checkBox")   
 

 

label參數(shù)是復(fù)選框的標(biāo)簽文本。復(fù)選框沒(méi)有樣式標(biāo)記,但是它們產(chǎn)生屬于自己的獨(dú)一無(wú)二的命令事件:EVT_CHECKBOX。wx.CheckBox的開(kāi)關(guān)狀態(tài)可以使用GetValue()SetValue(state)方法來(lái)訪問(wèn),并且其值是一個(gè)布爾值。IsChecked()方法等同于GetValue()方法,只是為了讓代碼看起來(lái)更易明白。

 

如何創(chuàng)建一組單選按鈕(radio button)?

單選按鈕是一種允許用戶從幾個(gè)選項(xiàng)中選擇其一的窗口部件。與復(fù)選框不同,單選按鈕是顯式地成組配置,并且只能選擇其中一個(gè)選項(xiàng)。當(dāng)選擇了新的選項(xiàng)時(shí),上次的選擇就關(guān)閉了。單選按鈕的使用比復(fù)選框復(fù)雜些,因?yàn)樗枰唤M織到一組中以便使用。radio button的名字得自于老式轎車(chē)上有著同樣行為的成組的選擇按鈕。

 

wxPython中,有兩種方法可以創(chuàng)建一組單選按鈕。其一,wx.RadioButton,它要求你一次創(chuàng)建一個(gè)按鈕,而wx.RadioBox使你可以使用單一對(duì)象來(lái)配置完整的一組按鈕,這些按鈕顯示在一個(gè)矩形中。

 

wx.RadioButton類(lèi)更簡(jiǎn)單些,在單選按鈕對(duì)其它窗口部件有直接影響或單選按鈕不是布置在一個(gè)單一的矩形中的情況下,它是首選。圖7.11顯示了一組wx.RadioButton對(duì)象的列子。

 

圖7.11

 

我們?cè)谶@個(gè)例子中使用wx.RadioButton的原因是因?yàn)槊總€(gè)單選按鈕控制著一個(gè)關(guān)聯(lián)的文本控件。由于窗口部件是位于這組單選按鈕之外的,所以我們不能只用一個(gè)單選按鈕框。

 

如何創(chuàng)建單選按鈕

 

例7.11顯示了圖7.11的代碼,它管理單選按鈕和文本控件之間的聯(lián)系。

 

例7.11 使用wx.RadioButton來(lái)控制另一個(gè)窗口部件

 

Python代碼  
  1. import wx  
  2.   
  3. class RadioButtonFrame(wx.Frame):  
  4.     def __init__(self):  
  5.         wx.Frame.__init__(selfNone, -1'Radio Example',   
  6.                 size=(200200))  
  7.         panel = wx.Panel(self, -1)  
  8.   
  9. #創(chuàng)建單選按鈕  
  10.         radio1 = wx.RadioButton(panel, -1"Elmo", pos=(2050), style=wx.RB_GROUP)  
  11.         radio2 = wx.RadioButton(panel, -1"Ernie", pos=(2080))  
  12.         radio3 = wx.RadioButton(panel, -1"Bert", pos=(20110))  
  13.   
  14. #創(chuàng)建文本控件  
  15.         text1 = wx.TextCtrl(panel, -1, "", pos=(8050))  
  16.         text2 = wx.TextCtrl(panel, -1, "", pos=(8080))  
  17.         text3 = wx.TextCtrl(panel, -1, "", pos=(80110))  
  18.         self.texts = {"Elmo": text1, "Ernie": text2, "Bert": text3}#連接按鈕和文本  
  19.         for eachText in [text2, text3]:  
  20.             eachText.Enable(False)  
  21.         for eachRadio in [radio1, radio2, radio3]:#綁定事件  
  22.             self.Bind(wx.EVT_RADIOBUTTON, self.OnRadio, eachRadio)  
  23.         self.selectedText = text1  
  24.   
  25.     def OnRadio(self, event):#事件處理器  
  26.         if self.selectedText:  
  27.             self.selectedText.Enable(False)  
  28.         radioSelected = event.GetEventObject()  
  29.         text = self.texts[radioSelected.GetLabel()]  
  30.         text.Enable(True)  
  31.         self.selectedText = text  
  32.   
  33. if __name__ == '__main__':  
  34.     app = wx.PySimpleApp()  
  35.     RadioButtonFrame().Show()  
  36.     app.MainLoop()   
 

我們創(chuàng)建了單選按鈕和文本框,然后使用字典來(lái)建立它們間的連接。一個(gè)for循環(huán)使得兩個(gè)文本框無(wú)效,另一個(gè)for循環(huán)綁定單選按鈕命令事件。當(dāng)事件發(fā)生的時(shí)候,當(dāng)前活動(dòng)的文本框變?yōu)闊o(wú)效,與被敲擊的按鈕相匹配的文本框變?yōu)橛行А?

wx.RadioButton的使用類(lèi)似于是wx.CheckBox。它們的構(gòu)造函數(shù)幾乎是相同的,如下所示:

 

Python代碼  
  1. wx.RadioButton(parent, id, label, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, validator=wx.DefaultValidator, name="radioButton")   
 

 

在復(fù)選框中,label是相應(yīng)按鈕的顯示標(biāo)簽。

 

wx.RB_GROUP樣式聲明該按鈕位于一組單選按鈕開(kāi)頭。一組單選按鈕的定義是很重要的,因?yàn)樗刂崎_(kāi)關(guān)行為。當(dāng)組中的一個(gè)按鈕被選中時(shí),先前被選中的按鈕被切換到未選中狀態(tài)。在一個(gè)單選按鈕使用wx.RB_GROUP被創(chuàng)建后,所有后來(lái)的被添加到相同父窗口部件中的單選按鈕都被添加到同一組,直到另一單選按鈕使用wx.RB_GROUP被創(chuàng)建,并開(kāi)始下一個(gè)組。在例7.11中,第一個(gè)單選按鈕是使用wx.RB_GROUP聲明的,而后來(lái)的沒(méi)有。結(jié)果導(dǎo)致所有的按鈕都被認(rèn)為在同一組中,這樣一來(lái),敲擊它們中的一個(gè)時(shí),先前被選中按鈕將關(guān)閉。

 

使用單選框

 

通常,如果你想去顯示一組按鈕,分別聲明它們不是最好的方法。取而代之,wxPython使用wx.RadioBox類(lèi)讓你能夠創(chuàng)建一個(gè)單一的對(duì)象,該對(duì)象包含了完整的組。如圖7.12所示,它看起來(lái)非常類(lèi)似一組單選按鈕。

 

圖7.12

 

要使用wx.RadioBox類(lèi),你所需要的全部就是構(gòu)造函數(shù)。例7.12顯示了圖7.12的代碼。

 

例7.12 建造單選框

 

Python代碼  
  1. import wx  
  2.   
  3. class RadioBoxFrame(wx.Frame):  
  4.     def __init__(self):  
  5.         wx.Frame.__init__(selfNone, -1'Radio Box Example',   
  6.                 size=(350200))  
  7.         panel = wx.Panel(self, -1)  
  8.         sampleList = ['zero''one''two''three''four''five',  
  9.                       'six''seven''eight']  
  10.         wx.RadioBox(panel, -1"A Radio Box", (1010), wx.DefaultSize,  
  11.                         sampleList, 2, wx.RA_SPECIFY_COLS)  
  12.   
  13.         wx.RadioBox(panel, -1, "", (15010), wx.DefaultSize,  
  14.                         sampleList, 3, wx.RA_SPECIFY_COLS | wx.NO_BORDER)  
  15.   
  16. if __name__ == '__main__':  
  17.     app = wx.PySimpleApp()  
  18.     RadioBoxFrame().Show()  
  19.     app.MainLoop()   
 

wx.RadioBox的構(gòu)造函數(shù)比簡(jiǎn)單的單選按鈕更復(fù)雜,因?yàn)槟阈枰ヒ幌伦訛樗械陌粹o指定數(shù)據(jù),如下所示:

 

Python代碼  
  1. wx.RadioBox(parent, id, label, pos=wx.DefaultPosition,  
  2.         size=wxDefaultSize, choices=None, majorDimension=0,  
  3.         style=wx.RA_SPECIFY_COLS, validator=wx.DefaultValidator,  
  4.         name="radioBox")  
 

label參數(shù)是靜態(tài)文本,它顯示在單選框的邊框上。這些按鈕使用choices參數(shù)指定,它是一個(gè)Python的字符串標(biāo)簽的序列。

 

如同網(wǎng)格的sizer一樣,你通過(guò)使用規(guī)定一個(gè)維數(shù)的尺寸來(lái)指定wx.RadioBox的尺度,wxPython在另一維度上自動(dòng)填充。維度的主尺寸使用majorDimension參數(shù)指定。哪一維是主要的由樣式標(biāo)記決定。默認(rèn)值是wx.RA_SPECIFY_COLS。在本例中,左框的列數(shù)被設(shè)置為2,右框的列數(shù)被設(shè)置為3,行數(shù)由choices列表中的元素?cái)?shù)量動(dòng)態(tài)的決定。如果你想得到相反的行為,你要將樣式設(shè)置為wx.RA_SPECIFY_ROWS。如果你想在單選框被敲擊時(shí)響應(yīng)命令事件,那么這個(gè)命令事件是EVT_RADIOBOX

 

wx.RadioBox類(lèi)有許多方法來(lái)管理框中的不同的單選按鈕。這些方法使你能夠處理一個(gè)特定的內(nèi)部按鈕,傳遞該按鈕的索引。索引以0為開(kāi)始,并按嚴(yán)格的順序展開(kāi),它的順序就是按鈕標(biāo)簽傳遞給構(gòu)造函數(shù)的順序。表7.11列出了這些方法。

 

表7.11 wx.RadioBox的方法

EnableItem(n, flag)flag參數(shù)是一個(gè)布爾值,它用于使索引為n的按鈕有效或無(wú)效。要使整個(gè)框立即有效,使用Enable()

FindString(string):根據(jù)給定的標(biāo)簽返回相關(guān)按鈕的整數(shù)索引值,如果標(biāo)簽沒(méi)有發(fā)現(xiàn)則返回-1。

GetCount():返回框中按鈕的數(shù)量。

GetItemLabel(n) SetItemLabel(n, string):返回或設(shè)置索引為n的按鈕的字符串標(biāo)簽。

GetSelection() GetStringSelection() SetSelection(n) SetStringSelection( string)GetSelection()SetSelection()方法處理當(dāng)前所選擇的單選按鈕的整數(shù)索引。GetStringSelection()返回當(dāng)前所選擇的按鈕的字符串標(biāo)簽,SetStringSelection()改變所選擇的按鈕的字符串標(biāo)簽為給定值。沒(méi)有set*()產(chǎn)生EVT_RADIOBOX事件。

ShowItem(item, show)show參數(shù)是一個(gè)布爾值,用于顯示或隱藏索引為item的按鈕。

 

單選按鈕不是給用戶一系列選擇的唯一方法。列表框和組合框占用的空間也少,也可以被配置來(lái)讓用戶從同一組中作多個(gè)選擇。

 

如何創(chuàng)建一個(gè)列表框?

 

列表框是提供給用戶選擇的另一機(jī)制。選項(xiàng)被放置在一個(gè)矩形的窗口中,用戶可以選擇一個(gè)或多個(gè)。列表框比單選按鈕占據(jù)較少的空間,當(dāng)選項(xiàng)的數(shù)目相對(duì)少的時(shí)候,列表框是一個(gè)好的選擇。然而,如果用戶必須將滾動(dòng)條拉很遠(yuǎn)才能看到所有的選項(xiàng)的話,那么它的效用就有所下降了。圖7.13顯示了一個(gè)wxPython列表框。

 

 

wxPython中,列表框是類(lèi)wx.ListBox的元素。該類(lèi)的方法使你能夠處理列表中的選擇。

 

如何創(chuàng)建一個(gè)列表框

 

例7.13顯示了產(chǎn)生圖7.13的代碼

 

例7.13 使用wx.ListBox

 

Python代碼  
  1. import wx  
  2.   
  3. class ListBoxFrame(wx.Frame):  
  4.     def __init__(self):  
  5.         wx.Frame.__init__(selfNone, -1'List Box Example',   
  6.                 size=(250200))  
  7.         panel = wx.Panel(self, -1)  
  8.   
  9.         sampleList = ['zero''one''two''three''four''five',  
  10.                       'six''seven''eight''nine''ten''eleven',  
  11.                       'twelve''thirteen''fourteen']  
  12.   
  13.         listBox = wx.ListBox(panel, -1, (2020), (80120), sampleList,   
  14.                 wx.LB_SINGLE)  
  15.         listBox.SetSelection(3)  
  16.                   
  17. if __name__ == '__main__':  
  18.     app = wx.PySimpleApp()  
  19.     ListBoxFrame().Show()  
  20.     app.MainLoop()    
 

wx.ListBox的構(gòu)造函數(shù)類(lèi)似于單選框的,如下所示:

 

Python代碼  
  1. wx.ListBox(parent, id, pos=wx.DefaultPosition, size=wx.DefaultSize, choices=None, style=0, validator=wx.DefaultValidator, name="listBox")   

 

單選框和列表框的主要區(qū)別是wx.ListBox沒(méi)有label屬性。顯示在列表中的元素放置在參數(shù)choices中,它是一個(gè)字符串的序列。列表框有三種互斥的樣式,它決定用戶如何從列表框中選擇元素,說(shuō)明在表7.12中。

 

用戶通常對(duì)于多選有一些問(wèn)題,因?yàn)樗鼈円话阆M?jiàn)到的是單選列表,對(duì)于多選來(lái)說(shuō)可能是有挑戰(zhàn)性的(就像單選題和多選題一樣),尤其是對(duì)于那些易受困擾的用戶。如果你使用了一個(gè)多選的列表,我們建議你清楚地標(biāo)明該列表。

 

表7.12 列表框的選擇類(lèi)型樣式

 

wx.LB_EXTENDED:用戶可以通過(guò)使用shift并敲擊鼠標(biāo)來(lái)選擇一定范圍內(nèi)的連續(xù)的選項(xiàng),或使用等同功能的按鍵。

wx.LB_MULTIPLE:用戶可以一次選擇多個(gè)選項(xiàng)(選項(xiàng)可以是不連續(xù)的)。實(shí)際上,在這種情況下,列表框的行為就像是一組復(fù)選框。

 

wx.LB_SINGLE:用戶一次只能選一個(gè)選項(xiàng)。實(shí)際上,在這種情況下,列表框的行為就像是一組單選按鈕。

 

有三種控制wx.ListBox中滾動(dòng)條的顯示的樣式,如表7.13所示。

 

表7.13 列表框的滾動(dòng)條類(lèi)型樣式

wx.LB_ALWAYS_SB:列表框?qū)⑹冀K顯示一個(gè)垂直的滾動(dòng)條,不管有沒(méi)有必要。

wx.LB_HSCROLL:如果本地控支持,那么列表框在選擇項(xiàng)太多時(shí),將創(chuàng)建一個(gè)水平滾動(dòng)條。

wx.LB_HSCROLL:列表框只在需要的時(shí)候顯示一個(gè)垂直的滾動(dòng)條。這是默認(rèn)樣式。

 

還有一個(gè)樣式wx.LB_SORT,它使得列表中的元素按字母順序排序。

 

有兩個(gè)專(zhuān)用于wx.ListBox的命令事件。EVT_LISTBOX事件在當(dāng)列表中的一個(gè)元素被選擇時(shí)觸發(fā)(即使它是當(dāng)前所選擇的元素)。如果列表被雙擊,EVT_LISTBOX_DCLICK事件發(fā)生。

 

有一些專(zhuān)用于列表框的方法,你可以用來(lái)處理框中的項(xiàng)目。表7.14對(duì)許多的方法作了說(shuō)明。列表框中的項(xiàng)目索引從0開(kāi)始。

一旦你有了一個(gè)列表框,自然就想把它與其它的窗口部件結(jié)合起來(lái)使用,如下拉菜單,或復(fù)選框。在下一節(jié),我們對(duì)此作討論。

 

表7.14 列表框的方法

Append(item):把字符串項(xiàng)目添加到列表框的尾部。

Clear():清空列表框。

Delete(n):刪除列表框中索引為n的項(xiàng)目。

Deselect(n):在多重選擇列表框中,導(dǎo)致位于位置n的選項(xiàng)取消選中。在其它樣式中不起作用。

FindString(string):返回給定字符串的整數(shù)位置,如果沒(méi)有發(fā)現(xiàn)則返回-1。

GetCount():返回列表中字符串的數(shù)量。

GetSelection() SetSelection(n, select) GetStringSelection() SetStringSelection(string, select) GetSelections()GetSelection()得到當(dāng)前選擇項(xiàng)的整數(shù)索引(僅對(duì)于單選列表)。對(duì)于多選列表,使用GetSelections()來(lái)返回包含所選項(xiàng)目的整數(shù)位置的元組。對(duì)于單選列表,GetStringSelection()返回當(dāng)前選擇的字符串。相應(yīng)的set方法使用布爾值參數(shù)select設(shè)置指定字符串或索引選項(xiàng)的狀態(tài)。使用這種方法改變選擇不觸發(fā)EVT_LISTBOX事件。

GetString(n) SetString(n, string):得到或設(shè)置位置n處的字符串。

InsertItems(items, pos):插入?yún)?shù)items中的字符串列表到該列表框中pos參數(shù)所指定的位置前。位置0表示把項(xiàng)目放在列表的開(kāi)頭。

Selected(n):返回對(duì)應(yīng)于索引為n的項(xiàng)目的選擇狀態(tài)的布爾值。

Set(choices):重新使用choices的內(nèi)容設(shè)置列表框。

 

如何合并復(fù)選框和列表框?

 

你可以使用類(lèi)wx.CheckListBox來(lái)將復(fù)選框與列表框合并。圖7.14顯示了列表框和復(fù)選框在合并在一起的例子。

 

圖7.14

 

wx.CheckListBox的構(gòu)造函數(shù)和大多數(shù)方法與wx.ListBox的相同。它有一個(gè)新的事件:wx.EVT_CHECKLISTBOX,它在當(dāng)列表中的一個(gè)復(fù)選框被敲擊時(shí)觸發(fā)。它有兩個(gè)管理復(fù)選框的新的方法:Check(n, check)設(shè)置索引為n的項(xiàng)目的選擇狀態(tài),IsChecked(item)在給定的索引的項(xiàng)目是選中狀態(tài)時(shí)返回True

 

如果我想要下拉形式的選擇該怎么做?

 

下拉式選擇是一種僅當(dāng)下拉箭頭被敲擊時(shí)才顯示選項(xiàng)的選擇機(jī)制。它是顯示所選元素的最簡(jiǎn)潔的方法,當(dāng)屏幕空間很有限的時(shí)候,它是最有用的。圖7.15顯示了一個(gè)關(guān)閉的下拉式選擇。圖7.16顯示了一個(gè)打開(kāi)的下拉式選擇。

 

圖7.15

圖7.16

 

 

下拉式選擇的使用與標(biāo)準(zhǔn)的列表框是很相似的。例7.14顯示了如何創(chuàng)建一個(gè)下拉式選擇。

 

例7.14

 

Python代碼  
  1. import wx  
  2.   
  3. class ChoiceFrame(wx.Frame):  
  4.     def __init__(self):  
  5.         wx.Frame.__init__(selfNone, -1'Choice Example',   
  6.                 size=(250200))  
  7.         panel = wx.Panel(self, -1)  
  8.         sampleList = ['zero''one''two''three''four''five',  
  9.                       'six''seven''eight']  
  10.         wx.StaticText(panel, -1"Select one:", (1520))  
  11.         wx.Choice(panel, -1, (8518), choices=sampleList)  
  12.   
  13. if __name__ == '__main__':  
  14.     app = wx.PySimpleApp()  
  15.     ChoiceFrame().Show()  
  16.     app.MainLoop()   
 

wx.Choice的構(gòu)造函數(shù)與列表框的基本相同:

 

Python代碼  
  1. wx.Choice(parent, id, pos=wx.DefaultPosition, size=wx.DefaultSize, choices=None, style=0, validator=wx.DefaultValidator, name="choice")   
 

 

wx.Choice沒(méi)有專(zhuān)門(mén)的樣式,但是它有獨(dú)特的命令事件:EVT_CHOICE。幾乎表7.14中所有適用于單選列表框的方法都適用于wx.Choice對(duì)象。

 

我能夠?qū)⑽谋居蚺c列表合并在一起嗎?

 

將文本域與列表合并在一起的窗口部件稱(chēng)為組合框,其本質(zhì)上是一個(gè)下拉選擇和文本框的組合。圖7.17顯示了一個(gè)組合框。

 

圖7.17 左邊是wx.CB_DropDOWN樣式,右邊是wx.CB_SIMPLE樣式

 

 

Windows上,你可以使用右邊的樣式,它是一個(gè)列表框和文本框的組合。

創(chuàng)建組合框的代碼與我們已經(jīng)見(jiàn)過(guò)的選擇是類(lèi)似的。該類(lèi)是wx.ComboBox,它是wx.Choice的一個(gè)子類(lèi)。例7.15顯示了圖7.17的代碼:

 

例7.15

 

Python代碼  
  1. import wx  
  2.   
  3. class ComboBoxFrame(wx.Frame):  
  4.     def __init__(self):  
  5.         wx.Frame.__init__(selfNone, -1'Combo Box Example',   
  6.                 size=(350300))  
  7.         panel = wx.Panel(self, -1)  
  8.         sampleList = ['zero''one''two''three''four''five',  
  9.                       'six''seven''eight']  
  10.         wx.StaticText(panel, -1"Select one:", (1515))  
  11.         wx.ComboBox(panel, -1"default value", (1530), wx.DefaultSize,  
  12.                     sampleList, wx.CB_DropDOWN)  
  13.         wx.ComboBox(panel, -1"default value", (15030), wx.DefaultSize,  
  14.                         sampleList, wx.CB_SIMPLE)  
  15.                           
  16. if __name__ == '__main__':  
  17.     app = wx.PySimpleApp()  
  18.     ComboBoxFrame().Show()  
  19.     app.MainLoop()          
 

wx.ComboBox的構(gòu)造函數(shù)如下所示:

 

 

Python代碼  
  1. wx.ComboBox(parent, id, value="", pos=wx.DefaultPosition,  
  2.         size=wx.DefaultSize, choices, style=0,  
  3.         validator=wx.DefaultValidator, name="comboBox")  
 

對(duì)于wx.ComboBox來(lái)說(shuō)有4種樣式。其中的兩種決定了如何繪制組合框:wx.CB_DropDOWN創(chuàng)建一個(gè)帶有下拉列表的組合框,wx.CB_SIMPLE創(chuàng)建一個(gè)帶有列表框的組合框。在Windows上你可以只使用wx.CB_SIMPLE樣式。任何組合框都可以被指定為wx.CB_READONLY樣式,它防止用戶在文本域中鍵入。當(dāng)組合框被指定為只讀時(shí),所做的選擇必須來(lái)自于選擇列表的元素之一,即使你用程序來(lái)設(shè)置它也不行。最后wx.CB_SORT樣式導(dǎo)致選擇列表中的元素按字母順序顯示。

 

由于wx.ComboBoxwx.Choice的子類(lèi),所有的wx.Choice的方法都能被組合框調(diào)用,如表7.14所示。另外,還有許多方法被定義來(lái)處理文本組件,它們的行為同wx.TextCtrl(參見(jiàn)表7.4),所定義的方法有Copy(), Cut(), GetInsertionPoint(), GetValue(), Paste(), Replace(from,to, text), Remove(from, to), SetInsertionPoint(pos), SetInsertionPointEnd(),和 SetValue()。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Python|利用wxpython實(shí)現(xiàn)GUI編寫(xiě)
GUI programming with wxPython 之 XRC
Python GUI應(yīng)用程序開(kāi)發(fā),不用wxPython等于浪費(fèi)時(shí)間!
Python GUI界面編程
wxPython:一曲MFC的挽歌,理想主義的絕唱
wxpython pymysql實(shí)現(xiàn)用戶登陸功能
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服