在任何GUI介面按鈕組件的應用最為廣泛。它捕獲用戶生成的點擊事件。其最明顯的用途是觸發綁定到一個處理函數。
wxPython類庫提供不同類型的按鈕。有一個簡單的、傳統的按鈕,wx.Button類對象帶有一些文本作為其標題。 兩狀態的按鈕也可以,它被命名為wx.ToggleButton。其按下或消沉狀態可通過事件處理程式函數來識別。
另一種類型的按鈕,wx.BitmapButton顯示位圖(圖片)作為它的圖示。
構造wx.Button類和wx.ToggleButton類使用以下參數 -
Wx.Button(parent, id, label, pos, size, style)
這些是wx.Button類的一些重要方法-
S.N. |
方法和說明
|
---|---|
1 |
SetLabel()
編程設置按鈕的標題
|
2 |
GetLabel()
返回按鈕的標題
|
3 |
SetDefault()
按鈕設置為默認頂層窗口。模擬click事件按下回車鍵
|
wx.ToggleButton類的兩種重要的方法是 -
S.N. |
方法和說明
|
---|---|
1 |
GetValue() Returns the state of toggle button (on/off) |
2 |
SetValue() Sets the state of button programmatically |
為了創建位圖按鈕,首先,位圖對象需要被構建圖像檔出來。
wx.Bitmap類下麵是最常用的構造函數 -
Wx.Bitmap(fiiename, wx.BITMAP_TYPE)
一些預定義的位圖類型常量是 -
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)對象作為參數wx.BitmapButton類的構造函數中的一個。
Wx.BitmapButton(parent, id, bitmap, pos, size, style)
在某些操作系統平臺上,位圖按鈕可以顯示位圖和標籤。 SetLabel()方法用於指定標題。在其他平臺上,它作為一個內部的標籤。正常的按鈕,以及位圖按鈕發出wx.CommandEvent。 EVT_BUTTON綁定器關聯一個函數來做處理。
另一方面切換按鈕使用wx.TOGGLEBUTTON綁定器來處理事件。
在下面的例子中,所有三種類型的按鈕被放置在面板的垂直框大小測定器。
使用語句創建簡單的按鈕對象 -
self.btn = wx.Button(panel, -1, "click Me")
切換按鈕使用下麵的語句構造-
self.tbtn = wx.ToggleButton(panel , -1, "click to on")
這些按鈕加入到使用以下語句垂直大小測定器 -
vbox.Add(self.btn,0,wx.ALIGN_CENTER) vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER)
注 - 由於wx.EXPAND標記時,切換按鈕佔據著幀的整個寬度。
使用EVT_BUTTON和EVT_TOGGLEBUTTON綁定器使它們各自相關聯處理程式。
self.btn.Bind(wx.EVT_BUTTON,self.OnClicked) self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle)
三個位圖按鈕添加到一個橫向box大小測定器。這些按鈕顯示圖示,作為它們的標題。
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))
這三個按鈕的點擊事件是針對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)
這些按鈕的內部標籤分別設置為新建,打開和保存。
OnClicked()事件處理函數檢索源按鈕的標籤,從而導致click事件。這種標籤列印到控制臺上。
def OnClicked(self, event): btn = event.GetEventObject().GetLabel() print "Label of pressed button = ",btn
點擊切換按鈕時OnToggle()觸發事件處理程式。其狀態由GetValue()方法讀取,因此按鈕的標題被設置。
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.xuhuhu.com') app.MainLoop()
上面的代碼產生下麵的輸出 -


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
上一篇:
wxPython佈局管理
下一篇:
wxPython可停靠窗口