フォーラム | 最新のWeb開発のチュートリアル
 

wxPythonボタン


ボタンウィジェットは任意のGUIインターフェイスで最も広く使用されています。 これは、ユーザーによって生成されたクリックイベントをキャプチャします。 その最も明白な使用は、それに結合されたハンドラ関数をトリガすることです。

wxPythonのクラスライブラリは、ボタンの種類を提供します。 シンプルで伝統的なボタン、ありwx.Buttonキャプションなど、いくつかのテキストを運ぶクラスオブジェクトは、。 二状態ボタンがと命名され、また利用可能であるwx.ToggleButton 。 その押されたか、うつ状態は、EventHandlerの機能によって識別することができます。

ボタンの別の種類、 wx.BitmapButtonビットマップ表示(image)その面にアイコンとして。

wx.Buttonクラスとwx.ToggleButtonクラスのコンストラクタは、次の引数を取ります -

Wx.Button(parent, id, label, pos, size, style)

これらはwx.Buttonクラスのいくつかの重要な方法であります -

SN メソッドと説明
1

SetLabel()

プログラムでボタンのキャプションを設定します。

2

GetLabel()

ボタンのキャプションを返します。

3

SetDefault()

ボタンはトップレベルウィンドウのデフォルトに設定されています。 Enterキーを押すと上のクリックイベントをエミュレートします

wx.ToggleButtonクラスの二つの重要な方法があります -

SN メソッドと説明
1

GetValue()

トグルボタンの状態を返します(on/off)

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)

三つのビットマップボタンが水平ボックスサイザーに追加されます。 これらのボタンは、彼らのキャプションとしてのアイコンなどの画像を表示します。

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)

これらのボタンの内部ラベルがそれぞれ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

押されたボタンのラベル= SAVE