Slider
数値を指定する際に使用されるSliderのサンプルです。RGBの設定などでよく見かけるように、比較的範囲の大きい数値指定に向いていると言えるでしょう。
「sytle」に「SL_HORIZONTAL」を指定すると横方向のスライダーが配置されます。ただしデフォルトの配置方向が横方向なので、特に明示せずとも横方向で配置されます。
# -*- coding: utf-8 -*- import wx application = wx.App() frame = wx.Frame(None, wx.ID_ANY, u"テストフレーム", size=(300,200)) panel = wx.Panel(frame, wx.ID_ANY) #slider = wx.Slider(panel) 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」を指定します。
# -*- coding: utf-8 -*- import wx application = wx.App() frame = wx.Frame(None, wx.ID_ANY, u"テストフレーム", size=(300,200)) panel = wx.Panel(frame, wx.ID_ANY) slider = wx.Slider(panel, style=wx.SL_VERTICAL) layout = wx.BoxSizer(wx.VERTICAL) layout.Add(slider, flag=wx.GROW) panel.SetSizer(layout) frame.Show() application.MainLoop()
--実行結果--
上部が最小値、下部が最大値となります。

「SL_LABELS」を指定すると、スライダー上部にラベルが表示されるようになります。左から「設定されている最小値」「現在の値」「設定されている最大値」となります。
# -*- coding: utf-8 -*- import wx application = wx.App() frame = wx.Frame(None, wx.ID_ANY, u"テストフレーム", size=(300,200)) panel = wx.Panel(frame, wx.ID_ANY) 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」、現在の値が「77」となります。

ある程度の目安となる目盛りを表示させるには「SL_AUTOTICKS」を指定します。 デフォルトの目盛り幅は最小で設定されるので、設定変更を行う場合は「SetTickFreq」を使いましょう。
# -*- coding: utf-8 -*- import wx application = wx.App() frame = wx.Frame(None, wx.ID_ANY, u"テストフレーム", 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で設定)--

先程紹介したスタイルを複数指定するには「 | 」を使用します。
# -*- coding: utf-8 -*- import wx application = wx.App() frame = wx.Frame(None, wx.ID_ANY, u"テストフレーム", 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」を使いましょう。
# -*- coding: utf-8 -*- import wx application = wx.App() frame = wx.Frame(None, wx.ID_ANY, u"テストフレーム", size=(300,200)) panel = wx.Panel(frame, wx.ID_ANY) 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」を使います。 最小値を下回る値を設定した場合は最小値に、最大値を上回る値を設定した場合は最大値へ値は変更されます。
# -*- coding: utf-8 -*- import wx application = wx.App() frame = wx.Frame(None, wx.ID_ANY, u"テストフレーム", size=(300,200)) panel = wx.Panel(frame, wx.ID_ANY) 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」を使用します。引数には(イベント種別、イベント発生時に呼び出す関数)の順番で値を渡しています。
# -*- coding: utf-8 -*-
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, u"テストフレーム", 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()
--実行結果--
スライダーの値を変更すると、ステータスバーに現在値が入ります。

機能的にはスライダーと似ています!
