今回は、SpinCtrlに似たウィジット「SpinCtrlDouble」をご紹介します。
以前ご紹介したSpinCtrlは数値のみが入力可能で、値を上下させるボタンが初期配置されている便利なものでした。
今回の「SpinCtrlDouble」は基本的には「SpinCtrl」と同様ですが、”小数点も使える”という点が異なっています。
環境
- macOS Sierra 10.12.5
- python 3.4
- wxPython 4.0.0a3
スクリプト
# -*- coding: UTF-8 -*-
import wx
class App(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(300, 300), style=wx.DEFAULT_FRAME_STYLE)
p = wx.Panel(self, wx.ID_ANY)
# SpinCtrl
self.spinS = wx.SpinCtrl(p, wx.ID_ANY, size=(100, 25))
# SpinCtrlDouble
self.spinD = wx.SpinCtrlDouble(p, wx.ID_ANY, '0', inc=0.01, size=(100, 25))
b = wx.Button(p, wx.ID_ANY, 'button')
b.Bind(wx.EVT_BUTTON, self.click)
self.text = wx.StaticText(p, wx.ID_ANY, 'クリック時の値')
# レイアウト
layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(self.spinS, flag=wx.ALL, border=10)
layout.Add(self.spinD, flag=wx.ALL, border=10)
layout.Add(b, flag=wx.ALL, border=10)
layout.Add(self.text, flag=wx.ALL, border=10)
p.SetSizer(layout)
self.Show()
def click(self, event):
self.text.SetLabel(str(self.spinD.GetValue()))
if __name__ == "__main__":
app = wx.App()
App(None, wx.ID_ANY, 'タイトル')
app.MainLoop()
実行結果
実行直後は違いがわかりませんが、上が「SpinCtrl」で下が「SpinCtrlDouble」です。
動かしているところ。
解説
# SpinCtrlDouble
self.spinD = wx.SpinCtrlDouble(p, wx.ID_ANY, '0', inc=0.01, size=(100, 25))
ここでインスタンス化を行なっています。この時の引数は(親ウィジット、ID、初期値、インクリメント値、サイズ)です。
インクリメントというのは「増加」という意味ですが、ここでは「1クリックごとの増減値」を意味する言葉として使用しています。
今回はインクリメント値に「0.01」を指定していますので、上下のボタンをクリックするたびに現在の値から0.01ずつ増減します。
メソッド紹介
基本的にはSpinCtrlと同様のメソッドを使用することができます。
# 現在値を取得する
self.spinD.GetValue()
# 設定されている最小値を取得する
self.spinD.GetMin()
# 設定されている最大値を取得する
self.spinD.GetMax()
# 設定されている最小値と最大値を取得する
self.spinD.GetRange()
# 設定されているインクリメント値を取得する
self.spinD.GetIncrement()
# 値を設定する
self.spinD.SetValue(0.2)
# 最小値を設定する
self.spinD.SetMin(0.2)
# 最大値を設定する
self.spinD.SetMax(50.0)
# 最小値と最大値を設定する
self.spinD.SetRange(10.0, 50.0)
# インクリメント値を設定する
self.spinD.SetIncrement(0.03)
まとめ
「SpinCtrl」「SpinCtrlDouble」はどちらもユーザーに数値のみの入力を強制させるためのウィジットです。
通常の使用であれば「SpinCtrl」で十分だとは思いますが、必ず小数点で入力しなければいけないような場面では「SpinCtrlDouble」を使うようにしましょう。
0 件のコメント:
コメントを投稿