数値を指定する際に使用されるSliderのサンプルです。RGBの設定などでよく見かけるように、比較的範囲の大きい数値指定に向いていると言えるでしょう。
横方向スライダー
sytleにSL_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') slider = wx.Slider(panel, style=wx.SL_HORIZONTAL) layout = wx.BoxSizer(wx.VERTICAL) layout.Add(slider, flag=wx.GROW) panel.SetSizer(layout) frame.Show() application.MainLoop()
最も一般的な横方向スライダーです。
縦方向スライダー
縦方向スライダーを配置する場合はSL_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') slider = wx.Slider(panel, style=wx.SL_VERTICAL) layout = wx.BoxSizer(wx.HORIZONTAL) layout.Add(slider, flag=wx.GROW) panel.SetSizer(layout) frame.Show() application.MainLoop()
上部が最小値、下部が最大値となります。
状態ラベル表示
SL_LABELSを指定すると、スライダー上部にラベルが表示されるようになります。左から設定されている最小値、現在の値、設定されている最大値となります。
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') slider = wx.Slider(panel, style=wx.SL_LABELS) layout = wx.BoxSizer(wx.VERTICAL) layout.Add(slider, flag=wx.GROW) panel.SetSizer(layout) frame.Show() application.MainLoop()
下図の場合、最小値が0、最大値が100、現在の値が75となります。
目盛り表示
ある程度の目安となる目盛りを表示させるにはSL_AUTOTICKSを指定します。デフォルトの目盛り幅は最小で設定されるので、設定変更を行う場合はSetTickFreqを使いましょう。
import wx application = wx.App() frame = wx.Frame(None, wx.ID_ANY, 'テストフレーム', size=(300, 200)) panel = wx.Panel(frame, wx.ID_ANY) slider = wx.Slider(panel, style=wx.SL_AUTOTICKS) slider.SetTickFreq(10) layout = wx.BoxSizer(wx.VERTICAL) layout.Add(slider, flag=wx.GROW) panel.SetSizer(layout) frame.Show() application.MainLoop()
目盛り幅を10で設定しています。
参考としてデフォルトの目盛り幅も掲載しておきます。
複合スタイル
先程紹介したスタイルを複数指定するには「 | 」を使用します。
import wx application = wx.App() frame = wx.Frame(None, wx.ID_ANY, 'テストフレーム', size=(300, 200)) panel = wx.Panel(frame, wx.ID_ANY) slider = wx.Slider(panel, style=wx.SL_VERTICAL | wx.SL_LABELS | wx.SL_AUTOTICKS) layout = wx.BoxSizer(wx.HORIZONTAL) layout.Add(slider, flag=wx.GROW) panel.SetSizer(layout) frame.Show() application.MainLoop()
縦方向、状態ラベル表示、目盛り表示を指定しました。
最大値と最小値
スライダーに設定されている最小値を取得するにはGetMinを、最大値を取得するにはGetMaxを利用します。最小値・最大値の設定はそれぞれSetMin、SetMaxを使いましょう。
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') slider = wx.Slider(panel, style=wx.SL_LABELS) print(slider.GetMin()) print(slider.GetMax()) slider.SetMin(100) slider.SetMax(500) layout = wx.BoxSizer(wx.VERTICAL) layout.Add(slider, flag=wx.GROW) panel.SetSizer(layout) frame.Show() application.MainLoop()
最小値を0から100へ、最大値を100から500へ変更しました。
0 100
値の設定・取得
スライダー値の設定・取得は、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') slider = wx.Slider(panel, style=wx.SL_LABELS) slider.SetValue(20) print(slider.GetValue()) layout = wx.BoxSizer(wx.VERTICAL) layout.Add(slider, flag=wx.GROW) panel.SetSizer(layout) frame.Show() application.MainLoop()
20
イベント設定
スライダーへイベントを設定するにはBindを使用します。引数には(イベント種別、イベント発生時に呼び出す関数)の順番で値を渡しています。
import wx def slider_value_change(event): obj = event.GetEventObject() frame.SetStatusText('Slider 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') slider = wx.Slider(panel) slider.Bind(wx.EVT_SLIDER, slider_value_change) layout = wx.BoxSizer(wx.VERTICAL) layout.Add(slider, flag=wx.GROW) panel.SetSizer(layout) frame.Show() application.MainLoop()
スライダーの値を変更すると、ステータスバーに現在値が入ります。