wxPython-ボタン
ボタンウィジェットは、あらゆるGUIインターフェイスで最も広く使用されています。ユーザーが生成したクリックイベントをキャプチャします。その最も明白な使用法は、それにバインドされたハンドラー関数をトリガーすることです。
wxPythonクラスライブラリは、さまざまなタイプのボタンを提供します。シンプルで伝統的なボタンがあり、wx.Buttonキャプションとしてテキストを運ぶクラスオブジェクト。2つの状態のボタンも利用できます。wx.ToggleButton。その押された状態または押された状態は、eventhandler関数によって識別できます。
別の種類のボタン、 wx.BitmapButton ビットマップ(画像)をアイコンとして顔に表示します。
wx.Buttonクラスおよびwx.ToggleButtonクラスのコンストラクターは次の引数を取ります-
Wx.Button(parent, id, label, pos, size, style) 
    これらはwx.Buttonクラスのいくつかの重要なメソッドです-
| SN | 方法と説明 | 
|---|---|
| 1 | SetLabel() ボタンのキャプションをプログラムで設定します  |  
      
| 2 | GetLabel() ボタンのキャプションを返します  |  
      
| 3 | SetDefault() トップレベルウィンドウのボタンはデフォルトに設定されています。Enterキーを押すとクリックイベントをエミュレートします  |  
      
wx.ToggleButtonクラスの2つの重要なメソッドは次のとおりです。
| SN | 方法と説明 | 
|---|---|
| 1 | GetValue() トグルボタンの状態を返します(オン/オフ)  |  
      
| 2 | SetValue() プログラムでボタンの状態を設定します  |  
      
ビットマップボタンを作成するには、まず、画像ファイルからビットマップオブジェクトを作成する必要があります。
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 | 
このビットマップオブジェクトは、wx.BitmapButtonクラスコンストラクターのパラメーターの1つとして使用されます。
Wx.BitmapButton(parent, id, bitmap, pos, size, style) 
    一部のOSプラットフォームでは、ビットマップボタンでビットマップとラベルの両方を表示できます。SetLabel()メソッドはキャプションを割り当てます。他のプラットフォームでは、内部ラベルとして機能します。
通常のボタンとビットマップボタンは、wx.CommandEventを発行します。EVT_BUTTONバインダーは、ハンドラー関数をそれに関連付けます。
一方、トグルボタンは、イベント処理にwx.TOGGLEBUTTONバインダーを使用します。
次の例では、3つのタイプすべてのボタンが、パネルの垂直ボックスサイザーに配置されています。
単純なボタンオブジェクトは、ステートメント-を使用して作成されます
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) 
    Note − wx.EXPANDフラグのため、トグルボタンはフレームの幅全体を占めます。
EVT_BUTTONおよびEVT_TOGGLEBUTTONバインダーを使用して、それらはそれぞれのハンドラーに関連付けられます。
self.btn.Bind(wx.EVT_BUTTON,self.OnClicked) 
self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle) 
    3つのビットマップボタンが水平ボックスサイザーに追加されます。これらのボタンは、画像をキャプションとしてアイコンとして表示します。
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)) 
    これら3つのボタンのクリックイベントは、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) 
    これらのボタンの内部ラベルは、それぞれNEW、OPEN、SAVEに設定されています。
OnClicked()イベントハンドラー関数は、クリックイベントの原因となったソースボタンのラベルを取得します。そのラベルはコンソールに印刷されています。
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') 
app.MainLoop() 
    上記のコードは次の出力を生成します-
                押されたボタンのラベル=クリックしてください
トグルボタンの状態をオフにする
ボタンの状態をオンに切り替えます
押されたボタンのラベル= NEW
押されたボタンのラベル= OPEN
押されたボタンのラベル=保存