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


SpinButton

主に数値等の値を上下させるために使用されるSpinButtonのサンプルとなります。Sliderと比べ、こちらは比較的小さい数値を扱うのに向いています。

「sytle」に「SP_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)
panel.SetBackgroundColour("#AFAFAF")

#spin_button = wx.SpinButton(panel)
spin_button = wx.SpinButton(panel, style=wx.SP_HORIZONTAL)

layout = wx.GridSizer(3, 1)
layout.Add(spin_button, flag=wx.GROW | wx.ALL, border=10)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

横並びのスピンボタンです。2つのボタンがセットで表示されます。

wxPython_spinbutton_01



縦並びのスピンボタンを配置する場合は「SP_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)
panel.SetBackgroundColour("#AFAFAF")

spin_button = wx.SpinButton(panel, style=wx.SP_VERTICAL)

layout = wx.GridSizer(3, 1)
layout.Add(spin_button, flag=wx.GROW | wx.ALL, border=10)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

今度は2つのボタンが縦並びで表示されています。

wxPython_spinbutton_02



スピンボタンはスライダーと違い、自分自身で値を表示出来る機能は持っていませんが、内部的にきちんと値を保持しています。 保持している値の設定・取得は、「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)
panel.SetBackgroundColour("#AFAFAF")

spin_button = wx.SpinButton(panel)

spin_button.SetValue(20)
print spin_button.GetValue()

layout = wx.GridSizer(3, 1)
layout.Add(spin_button, flag=wx.GROW | wx.ALL, border=10)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

wxPython_spinbottn_01


--出力結果--

20



スピンボタンへイベントを設定するには「Bind」を使用します。 引数には(イベント種別、イベント発生時に呼び出す関数)の順番で値を渡しています。

# -*- coding: utf-8 -*- 

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, u"テストフレーム", 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(3, 1)
layout.Add(spin_button, flag=wx.GROW | wx.ALL, border=10)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

左ボタン(減)・右ボタン(増)をクリックすると、ステータスバーに現在値が入るので、内部的に保持している値の上下する様子がわかると思います。

wxPython_spinbutton_03



スピンボタンに設定されている最小値を取得するには「GetMin」を、最大値を取得するには「GetMax」を利用します。 最小値・最大値の設定はそれぞれ「SetMin」「SetMax」を使いましょう。

# -*- coding: utf-8 -*- 

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, u"テストフレーム", 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(3, 1)
layout.Add(spin_button, flag=wx.GROW | wx.ALL, border=10)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

最小値をデフォルトの「0」から「100」へ、最大値をデフォルトの「100」から「500」へ変更しました。どれだけボタンを押しても最小値・最大値を超える事はありません。

wxPython_spinbutton_04


--出力結果--

0
100




Python
スタートブック


入門 Python 3


Effective
Python


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

 
 
 

これまた便利!

▶GUI:ListBox



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




P  R