主に数値等の値を上下させるために使用されるSpinButtonのサンプルとなります。Sliderと比べ、こちらは比較的小さい数値を扱うのに向いています。
横並びスピンボタン
sytleにSP_HORIZONTALを指定すると横並びのスピンボタンが配置されます。ただしデフォルトの配置方向が横並びなので、特に明示せずとも横並びで配置されます。
import wx
application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, 'テストフレーム', size=(300, 200))
panel = wx.Panel(frame, wx.ID_ANY)
panel.SetBackgroundColour('#AFAFAF')
spin_button = wx.SpinButton(panel, style=wx.SP_HORIZONTAL)
layout = wx.GridSizer(rows=3, cols=1, gap=(0, 0))
layout.Add(spin_button, flag=wx.GROW | wx.ALL, border=10)
panel.SetSizer(layout)
frame.Show()
application.MainLoop()
横並びのスピンボタンです。2つのボタンがセットで表示されます。

縦並びスピンボタン
縦並びのスピンボタンを配置する場合はSP_VERTICALを指定します。
import wx
application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, 'テストフレーム', size=(300, 200))
panel = wx.Panel(frame, wx.ID_ANY)
panel.SetBackgroundColour('#AFAFAF')
spin_button = wx.SpinButton(panel, style=wx.SP_VERTICAL)
layout = wx.GridSizer(rows=3, cols=1, gap=(0, 0))
layout.Add(spin_button, flag=wx.GROW | wx.ALL, border=10)
panel.SetSizer(layout)
frame.Show()
application.MainLoop()
2つのボタンが縦並びで表示されています。

値の設定・取得
スピンボタンはスライダーと違い、自分自身で値を表示出来る機能は持っていませんが、内部にきちんと値を保持しています。保持している値の設定・取得は、SetValue、GetValueを使いましょう。最小値を下回る値を設定した場合は最小値に、最大値を上回る値を設定した場合は最大値へ値は変更されます。
import wx
application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, 'テストフレーム', size=(300, 200))
panel = wx.Panel(frame, wx.ID_ANY)
panel.SetBackgroundColour('#AFAFAF')
spin_button = wx.SpinButton(panel)
spin_button.SetValue(20)
print(spin_button.GetValue())
layout = wx.GridSizer(rows=3, cols=1, gap=(0, 0))
layout.Add(spin_button, flag=wx.GROW | wx.ALL, border=10)
panel.SetSizer(layout)
frame.Show()
application.MainLoop()

20
イベント設定
スピンボタンへイベントを設定するにはBindを使用します。引数には(イベント種別、イベント発生時に呼び出す関数)の順番で値を渡しています。
import wx
def spinbutton_value_change(event):
obj = event.GetEventObject()
frame.SetStatusText('SpinButton value is ' + str(obj.GetValue()))
application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, 'テストフレーム', size=(300, 200))
frame.CreateStatusBar()
panel = wx.Panel(frame, wx.ID_ANY)
panel.SetBackgroundColour('#AFAFAF')
spin_button = wx.SpinButton(panel)
spin_button.Bind(wx.EVT_SPIN, spinbutton_value_change)
layout = wx.GridSizer(rows=3, cols=1, gap=(0, 0))
layout.Add(spin_button, flag=wx.GROW | wx.ALL, border=10)
panel.SetSizer(layout)
frame.Show()
application.MainLoop()
左ボタン(減)・右ボタン(増)をクリックすると、ステータスバーに現在値が入るので、内部的に保持している値の上下する様子がわかると思います。

最大値と最小値
スピンボタンに設定されている最小値を取得するにはGetMinを、最大値を取得するにはGetMaxを利用します。最小値・最大値の設定はそれぞれSetMin、SetMaxを使いましょう。
import wx
def spin_value_change(event):
obj = event.GetEventObject()
frame.SetStatusText('SpinButton value is ' + str(obj.GetValue()))
application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, 'テストフレーム', size=(300, 200))
frame.CreateStatusBar()
panel = wx.Panel(frame, wx.ID_ANY)
panel.SetBackgroundColour('#AFAFAF')
spin_button = wx.SpinButton(panel)
print(spin_button.GetMin())
print(spin_button.GetMax())
spin_button.SetMin(100)
spin_button.SetMax(500)
spin_button.Bind(wx.EVT_SPIN, spin_value_change)
layout = wx.GridSizer(rows=3, cols=1, gap=(0, 0))
layout.Add(spin_button, flag=wx.GROW | wx.ALL, border=10)
panel.SetSizer(layout)
frame.Show()
application.MainLoop()
最小値を0から100へ、最大値を100から500へ変更しました。どれだけボタンを押しても最小値・最大値を超える事はありません。

0 100
