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


RadioBox

前項で解説したRadioButtonの拡張版ともいえるRadioBoxの紹介です。ラジオボタンとの違いは下記の通りです。

  • StaticBoxSizerのようなタイトル付きボーダーで要素が囲われる
  • グループ内の値の設定・取得が容易
  • ボタン要素が動的なケースでの使用に向いている

基本的な使用方法として、BoxSizerのような横配置があります。初期化時の引数には(親ウィンドウ、識別子、ラベル、ボタン要素配列、配置方向指定)の順番で渡しています。

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


button_array = ("RB1", "RB2", "RB3", "RB4")
radio_box = wx.RadioBox(panel, wx.ID_ANY, "python-izm.com", choices=button_array, style=wx.RA_HORIZONTAL)


layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radio_box)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

タイトル付きボーダーに囲われたラジオボタンが表示されます。

wxPython_radiobox_01



次は縦配置です。styleに「RA_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)


button_array = ("RB1", "RB2", "RB3", "RB4")
radio_box = wx.RadioBox(panel, wx.ID_ANY, "python-izm.com", choices=button_array, style=wx.RA_VERTICAL)


layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radio_box)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

wxPython_radiobox_02



一定の要素数にて、折り返しをして配置させる事も可能です。ボタン要素の数が多い時などのケースで有効な手段となるでしょう。設定方法は初期化時に「majorDimension」を指定します。

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


button_array = ("RB1", "RB2", "RB3", "RB4", "RB5", "RB6", "RB7", "RB8", "RB9", "RB10")
radio_box = wx.RadioBox(panel, wx.ID_ANY, "python-izm.com", choices=button_array, majorDimension=4, style=wx.RA_HORIZONTAL)


layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radio_box)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

「majorDimension」を「4」で設定しているので、1つの行に4つ以上は配置されません。

wxPython_radiobox_03



ボタンのラベル変更を行うには「SetItemLabel」、もしくは「SetString」を使用します。 どちらも引数に(ボタン要素のインデックス、変更後ラベル)を設定することで利用することができます。

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


button_array = ("RB1", "RB2", "RB3", "RB4")
radio_box = wx.RadioBox(panel, wx.ID_ANY, "python-izm.com", choices=button_array, style=wx.RA_VERTICAL)

radio_box.SetItemLabel(1, u"ラジオボックス2")
radio_box.SetString(2, u"ラジオボックス3")

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radio_box, flag=wx.GROW)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

それぞれのラベルが「RB2」から「ラジオボックス2」へ、「RB3」から「ラジオボックス3」へ変更されました。

wxPython_radiobox_04



要素内のボタンを無効(選択出来ない状態)もしくは有効(選択出来る状態)にするには「EnableItem」を使用します。 引数にはボタン要素のインデックスと「False(無効)」もしくは「True(有効)」を渡します。

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


button_array = ("RB1", "RB2", "RB3", "RB4")
radio_box = wx.RadioBox(panel, wx.ID_ANY, "python-izm.com", choices=button_array, style=wx.RA_VERTICAL)

radio_box.EnableItem(1, False)

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radio_box)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

「RB2」が押せない状態となっています。

wxPython_radiobox_05



ボタンへツールチップ(補足情報を載せる小さいウィンドウ)を表示させるには「SetItemToolTip」を使用します。

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


button_array = ("RB1", "RB2", "RB3", "RB4")
radio_box = wx.RadioBox(panel, wx.ID_ANY, "python-izm.com", choices=button_array, style=wx.RA_VERTICAL)

radio_box.SetItemToolTip(1, "PYTHON-IZM.COM")

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radio_box)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

「RB2」の上にマウスカーソルを載せると、メッセージが出るようになります。

wxPython_radiobox_06



ボタンへイベントを設定するには「Bind」を使用します。 引数には(イベント種別、イベント発生時に呼び出す関数)の順番で値を渡し、呼び出す関数内部では選択されたボタンの要素名を出力しています。

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

import wx

def selected_button(event):
    obj = event.GetEventObject()
    frame.SetStatusText("Selected! " + obj.GetStringSelection())
        
application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, u"テストフレーム", size=(300,200))
frame.CreateStatusBar()

panel = wx.Panel(frame, wx.ID_ANY)


button_array = ("RB1", "RB2", "RB3", "RB4")
radio_box = wx.RadioBox(panel, wx.ID_ANY, "python-izm.com", choices=button_array, style=wx.RA_VERTICAL)

radio_box.Bind(wx.EVT_RADIOBOX, selected_button)

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radio_box)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

ボタンを選択すると、ステータスバーにそれぞれのボタンの要素名が入ります。

wxPython_radiobox_07



ボタンの選択状態の設定は、インデックスで指定する場合には「SetSelection」、要素名で指定する場合では「SetStringSelection」を使用します。 選択値を取得するには「GetSelection」および「GetStringSelection」で、インデックスで取得するか要素名で取得するかで使い分けをします。

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


button_array = ("RB1", "RB2", "RB3", "RB4")
radio_box = wx.RadioBox(panel, wx.ID_ANY, "python-izm.com", choices=button_array, style=wx.RA_VERTICAL)

radio_box.SetSelection(0)
radio_box.SetSelection(1)
radio_box.SetStringSelection("RB3")
radio_box.SetStringSelection("RB4")

print radio_box.GetSelection()
print radio_box.GetStringSelection()


layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radio_box)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

RadioButtonと同じようにグループ内では常に1つしか選択状態とならないので、一番最後に選択設定した「RB4」が選択されている状態となります。

wxPython_radiobox_08


--出力結果--

3
RB4



「GetCount」でRadioBox内の要素数、「GetColumnCount」でRadioBox内の列数、「GetRowCount」でRadioBox内の行数をそれぞれ取得出来ます。

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


button_array = ("RB1", "RB2", "RB3", "RB4", "RB5", "RB6", "RB7", "RB8", "RB9", "RB10")
radio_box = wx.RadioBox(panel, wx.ID_ANY, "python-izm.com", choices=button_array, majorDimension=4, style=wx.RA_HORIZONTAL)

print radio_box.GetCount()
print radio_box.GetColumnCount()
print radio_box.GetRowCount()

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radio_box)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

wxPython_radiobox_03


--出力結果--

10
4
3




Python
スタートブック


入門 Python 3


Effective
Python


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

 
 
 

こちらも必須!必須!

▶GUI:ComboBox



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




P  R