鍍金池/ 教程/ Python/ wxPython Button控件
wxPython GUI構(gòu)建工具wxFormBuilder
wxPython StaticText類
WxPython教程
wxPython可??看翱?/span>
wxPython ComboBox & Choice類
wxPython FlexiGridSizer布局
wxPython入門(Hello World)
wxPython RadioButton & RadioBox類
wxPython拖放
wxPython HTMLWindow類
wxPython ToolBar類
wxPython GridBagSizer布局
wxPython Dialog類
wxPython布局管理
wxPython TextCtrl類
wxPython開(kāi)發(fā)環(huán)境安裝
wxPython Slider類
wxPython CheckBox類
wxPython Major類
wxPython GridSizer布局
wxPython事件處理
wxPython SplitterWindow類
Menu Item, Menu & MenuBar類
wxPython Button控件
wxPython StaticBoxSizer布局
wxPython Guage類
wxPython Frame類
wxPython多文檔界面
wxPython Panel類
wxPython BoxSizer布局
wxPython繪圖API

wxPython Button控件

在任何GUI界面按鈕組件的應(yīng)用最為廣泛。它捕獲用戶生成的點(diǎn)擊事件。其最明顯的用途是觸發(fā)綁定到一個(gè)處理函數(shù)。

wxPython類庫(kù)提供不同類型的按鈕。有一個(gè)簡(jiǎn)單的、傳統(tǒng)的按鈕,wx.Button類對(duì)象帶有一些文本作為其標(biāo)題。 兩狀態(tài)的按鈕也可以,它被命名為wx.ToggleButton。其按下或消沉狀態(tài)可通過(guò)事件處理程序函數(shù)來(lái)識(shí)別。

另一種類型的按鈕,wx.BitmapButton顯示位圖(圖片)作為它的圖標(biāo)。
構(gòu)造wx.Button類和wx.ToggleButton類使用以下參數(shù) -
Wx.Button(parent, id, label, pos, size, style)
這些是wx.Button類的一些重要方法-
S.N.
方法和說(shuō)明
1

SetLabel()

編程設(shè)置按鈕的標(biāo)題
2

GetLabel()

返回按鈕的標(biāo)題
3

SetDefault()

按鈕設(shè)置為默認(rèn)頂層窗口。模擬click事件按下回車鍵
wx.ToggleButton類的兩種重要的方法是 -
S.N.
方法和說(shuō)明
1

GetValue()

Returns the state of toggle button (on/off)

2

SetValue()

Sets the state of button programmatically

為了創(chuàng)建位圖按鈕,首先,位圖對(duì)象需要被構(gòu)建圖像文件出來(lái)。
wx.Bitmap類下面是最常用的構(gòu)造函數(shù) -
Wx.Bitmap(fiiename, wx.BITMAP_TYPE)
一些預(yù)定義的位圖類型常量是 -
wx.BITMAP_TYPE_BMP
wx.BITMAP_TYPE_ICO
wx.BITMAP_TYPE_CUR
wx.BITMAP_TYPE_TIFF
wx.BITMAP_TYPE_TIF
wx.BITMAP_TYPE_GIF
wx.BITMAP_TYPE_PNG
wx.BITMAP_TYPE_JPEG
wx.BITMAP_TYPE_PCX
wx.BITMAP_TYPE_ICON
wx.BITMAP_TYPE_ANY
位圖(bitmap)對(duì)象作為參數(shù)wx.BitmapButton類的構(gòu)造函數(shù)中的一個(gè)。
Wx.BitmapButton(parent, id, bitmap, pos, size, style) 

在某些操作系統(tǒng)平臺(tái)上,位圖按鈕可以顯示位圖和標(biāo)簽。 SetLabel()方法用于指定標(biāo)題。在其他平臺(tái)上,它作為一個(gè)內(nèi)部的標(biāo)簽。正常的按鈕,以及位圖按鈕發(fā)出wx.CommandEvent。 EVT_BUTTON綁定器關(guān)聯(lián)一個(gè)函數(shù)來(lái)做處理。

另一方面切換按鈕使用wx.TOGGLEBUTTON綁定器來(lái)處理事件。
在下面的例子中,所有三種類型的按鈕被放置在面板的垂直框大小測(cè)定器。
使用語(yǔ)句創(chuàng)建簡(jiǎn)單的按鈕對(duì)象 -
self.btn = wx.Button(panel, -1, "click Me")
切換按鈕使用下面的語(yǔ)句構(gòu)造-
self.tbtn = wx.ToggleButton(panel , -1, "click to on")
這些按鈕加入到使用以下語(yǔ)句垂直大小測(cè)定器 -
vbox.Add(self.btn,0,wx.ALIGN_CENTER) 
vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER)
注 - 由于wx.EXPAND標(biāo)記時(shí),切換按鈕占據(jù)著幀的整個(gè)寬度。
使用EVT_BUTTON和EVT_TOGGLEBUTTON綁定器使它們各自相關(guān)聯(lián)處理程序。
self.btn.Bind(wx.EVT_BUTTON,self.OnClicked) 
self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle)
三個(gè)位圖按鈕添加到一個(gè)橫向box大小測(cè)定器。這些按鈕顯示圖標(biāo),作為它們的標(biāo)題。
bmp = wx.Bitmap("NEW.BMP", wx.BITMAP_TYPE_BMP) 
self.bmpbtn = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp,
   size = (bmp.GetWidth()+10, bmp.GetHeight()+10))
  
bmp1 = wx.Bitmap("OPEN.BMP", wx.BITMAP_TYPE_BMP) 
self.bmpbtn1 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp1,
   size = (bmp.GetWidth()+10, bmp.GetHeight()+10))
  
bmp2 = wx.Bitmap("SAVE.BMP", wx.BITMAP_TYPE_BMP) 
self.bmpbtn2 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp2,
   size = (bmp.GetWidth()+10, bmp.GetHeight()+10))
這三個(gè)按鈕的點(diǎn)擊事件是針對(duì)OnClicked()方法。
self.bmpbtn.Bind(wx.EVT_BUTTON, self.OnClicked) 
self.bmpbtn1.Bind(wx.EVT_BUTTON, self.OnClicked) 
self.bmpbtn2.Bind(wx.EVT_BUTTON, self.OnClicked)
這些按鈕的內(nèi)部標(biāo)簽分別設(shè)置為新建,打開(kāi)和保存。
OnClicked()事件處理函數(shù)檢索源按鈕的標(biāo)簽,從而導(dǎo)致click事件。這種標(biāo)簽打印到控制臺(tái)上。
def OnClicked(self, event): 
   btn = event.GetEventObject().GetLabel() 
   print "Label of pressed button = ",btn 
點(diǎn)擊切換按鈕時(shí)OnToggle()觸發(fā)事件處理程序。其狀態(tài)由GetValue()方法讀取,因此按鈕的標(biāo)題被設(shè)置。
def OnToggle(self,event): 
   state = event.GetEventObject().GetValue() 
   if state == True: 
      print "off" 
      event.GetEventObject().SetLabel("click to off") 
   else: 
      print "on" 
      event.GetEventObject().SetLabel("click to on")
完整的代碼列表如下 -
import wx 
class Mywin(wx.Frame): 
   def __init__(self, parent, title): 
      super(Mywin, self).__init__(parent, title = title,size = (200,150))  
      panel = wx.Panel(self) 
      vbox = wx.BoxSizer(wx.VERTICAL) 
         
      self.btn = wx.Button(panel,-1,"click Me") 
      vbox.Add(self.btn,0,wx.ALIGN_CENTER) 
      self.btn.Bind(wx.EVT_BUTTON,self.OnClicked) 
         
      self.tbtn = wx.ToggleButton(panel , -1, "click to on") 
      vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER) 
      self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle) 
         
      hbox = wx.BoxSizer(wx.HORIZONTAL) 
         
      bmp = wx.Bitmap("NEW.BMP", wx.BITMAP_TYPE_BMP) 
      self.bmpbtn = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp,
         size = (bmp.GetWidth()+10, bmp.GetHeight()+10)) 
			
      hbox.Add(self.bmpbtn,0,wx.ALIGN_CENTER) 
      self.bmpbtn.Bind(wx.EVT_BUTTON,self.OnClicked) 
      self.bmpbtn.SetLabel("NEW") 
         
      bmp1 = wx.Bitmap("OPEN.BMP", wx.BITMAP_TYPE_BMP) 
      self.bmpbtn1 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp1,
         size = (bmp.GetWidth()+10, bmp.GetHeight()+10)) 
			
      hbox.Add(self.bmpbtn1,0,wx.ALIGN_CENTER) 
      self.bmpbtn1.Bind(wx.EVT_BUTTON,self.OnClicked) 
      self.bmpbtn1.SetLabel("OPEN") 
         
      bmp2 = wx.Bitmap("SAVE.BMP", wx.BITMAP_TYPE_BMP) 
      self.bmpbtn2 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp2,
         size = (bmp.GetWidth()+10, bmp.GetHeight()+10))
			
      hbox.Add(self.bmpbtn2,0,wx.ALIGN_CENTER) 
      self.bmpbtn2.Bind(wx.EVT_BUTTON,self.OnClicked)
      self.bmpbtn2.SetLabel("SAVE") 
         
      vbox.Add(hbox,1,wx.ALIGN_CENTER) 
      panel.SetSizer(vbox) 
        
      self.Centre() 
      self.Show() 
      self.Fit()  
		
   def OnClicked(self, event): 
      btn = event.GetEventObject().GetLabel() 
      print "Label of pressed button = ",btn 
		
   def OnToggle(self,event): 
      state = event.GetEventObject().GetValue() 
		
      if state == True: 
         print "Toggle button state off" 
         event.GetEventObject().SetLabel("click to off") 
      else: 
         print " Toggle button state on" 
         event.GetEventObject().SetLabel("click to on") 
             
app = wx.App() 
Mywin(None,  'Button Demo - www.yiibai.com') 
app.MainLoop()
上面的代碼產(chǎn)生下面的輸出 -


Label of pressed button = click Me

Toggle button state off

Toggle button state on

Label of pressed button = NEW

Label of pressed button = OPEN

Label of pressed button = SAVE