Wxpython-buttons

提供:Dev Guides
移動先:案内検索

wxPython-ボタン

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

wxPythonクラスライブラリは、さまざまな種類のボタンを提供します。 シンプルで伝統的なボタン、 wx.Button クラスオブジェクトがあり、キャプションとしてテキストが含まれています。 wx.ToggleButton という名前の2つの状態のボタンも使用できます。 押された状態または押された状態は、eventhandler関数によって識別できます。

別のタイプのボタン wx.BitmapButton は、ビットマップ(画像)をアイコンとして顔に表示します。

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

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

これらは、wx.Buttonクラスの重要なメソッドです-

S.N. Methods & Description
1

SetLabel()

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

2

GetLabel()

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

3

SetDefault()

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

wx.ToggleButtonクラスの2つの重要なメソッドは-

S.N. Methods & Description
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)

注意-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

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