Python入門から応用までの学習サイト


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()

--実行結果--

最も一般的な横方向スライダーです。

wxPython_slider_01



縦方向スライダーを配置する場合は「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()

--実行結果--

上部が最小値、下部が最大値となります。

wxPython_slider_02



「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」となります。

wxPython_slider_03



ある程度の目安となる目盛りを表示させるには「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()

--実行結果(デフォルトの目盛り幅)--

wxPython_slider_04


--実行結果(目盛り幅を10で設定)--

wxPython_slider_05



先程紹介したスタイルを複数指定するには「 | 」を使用します。

# -*- 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()

--実行結果--

縦方向、状態ラベル表示、目盛り表示を指定しました。

wxPython_slider_06



スライダーに設定されている最小値を取得するには「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」へ変更しました。

wxPython_slider_07


--出力結果--

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()

--実行結果--

wxPython_slider_08


--出力結果--

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()

--実行結果--

スライダーの値を変更すると、ステータスバーに現在値が入ります。

wxPython_slider_09




Python
スタートブック


入門 Python 3


Effective
Python


退屈なことは
Pythonにやらせよう

 
 
 

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

▶GUI:SpinButton



確かな力が身につく
Python「超」入門




P  R