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


RadioButton

前項でのCheckBoxに続き、こちらも高頻度での使用が予想されるRadioButtonの紹介です。 複数の選択肢から1つ以上を選択出来るチェックボックスに対して、ラジオボタンは「複数の選択肢から1つだけ選択する」ようなケースで利用されます。 なお同様の機能を有する「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)
panel.SetBackgroundColour("#AFAFAF")

radiobutton_1 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン1")
radiobutton_2 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン2")
radiobutton_3 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン3")
radiobutton_4 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン4")

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radiobutton_1, flag=wx.GROW)
layout.Add(radiobutton_2, flag=wx.GROW)
layout.Add(radiobutton_3, flag=wx.GROW)
layout.Add(radiobutton_4, flag=wx.GROW)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

wxPython_radiobutton_01



先程のサンプルでは初期化時にラベル(ラジオボタンに表示される文字)を指定していました。 ラベルを変更するメソッドも用意されているので、必要に応じて使いましょう。

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

radiobutton_1 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン1")
radiobutton_2 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン2")
radiobutton_3 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン3")
radiobutton_4 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン4")

radiobutton_3.SetLabel("RadioButton3")

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radiobutton_1, flag=wx.GROW)
layout.Add(radiobutton_2, flag=wx.GROW)
layout.Add(radiobutton_3, flag=wx.GROW)
layout.Add(radiobutton_4, flag=wx.GROW)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

radiobutton_3のラベルが「ラジオボタン3」ではなく「RadioButton3」となりました。

wxPython_radiobutton_02



ラジオボタンを無効(選択出来ない状態)にするには「Disable」を使用します。 それとは逆に無効状態となっているラジオボタンを有効(選択出来る状態)へ変更するには「Enable」を使用しましょう。

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

radiobutton_1 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン1")
radiobutton_2 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン2")
radiobutton_3 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン3")
radiobutton_4 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン4")

radiobutton_3.Disable()
#radiobutton_3.Enable()

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radiobutton_1, flag=wx.GROW)
layout.Add(radiobutton_2, flag=wx.GROW)
layout.Add(radiobutton_3, flag=wx.GROW)
layout.Add(radiobutton_4, flag=wx.GROW)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

「ラジオボタン3」が押せない状態となっています。

wxPython_radiobutton_03



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

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

radiobutton_1 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン1")
radiobutton_2 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン2")
radiobutton_3 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン3")
radiobutton_4 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン4")

radiobutton_3.SetToolTipString("python-izm.com")

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radiobutton_1, flag=wx.GROW)
layout.Add(radiobutton_2, flag=wx.GROW)
layout.Add(radiobutton_3, flag=wx.GROW)
layout.Add(radiobutton_4, flag=wx.GROW)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

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

wxPython_radiobutton_04



ラジオボタンへイベントを設定するには「Bind」を使用します。 引数には(イベント種別、イベント発生時に呼び出す関数)の順番で値を渡し「ラジオボタン1」と「ラジオボタン2」ではそれぞれ違う関数を定義してイベント設定しています。 「ラジオボタン3」と「ラジオボタン4」では、引数に「イベント発生元」を追加し、チェックボックス初期化時のIDで判別して挙動を変えています。 なおサンプルでもあるように、ラジオボタン・フレームのどちらにBindしてもイベントはきちんと動作します。

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

import wx

def selected_radiobutton_1(event):
    frame.SetStatusText("Selected! radiobutton_1")

def selected_radiobutton_2(event):
    frame.SetStatusText("Selected! radiobutton_2")

def selected_radiobutton(event):
    if event.GetId() == 3333:
        frame.SetStatusText("Selected! radiobutton_3")
    elif event.GetId() == 4444:
        frame.SetStatusText("Selected! radiobutton_4")
        
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")

radiobutton_1 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン1")
radiobutton_2 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン2")
radiobutton_3 = wx.RadioButton(panel, 3333, u"ラジオボタン3")
radiobutton_4 = wx.RadioButton(panel, 4444, u"ラジオボタン4")

radiobutton_1.Bind(wx.EVT_RADIOBUTTON, selected_radiobutton_1)
radiobutton_2.Bind(wx.EVT_RADIOBUTTON, selected_radiobutton_2)
frame.Bind(wx.EVT_RADIOBUTTON, selected_radiobutton, radiobutton_3)
frame.Bind(wx.EVT_RADIOBUTTON, selected_radiobutton, radiobutton_4)

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radiobutton_1, flag=wx.GROW)
layout.Add(radiobutton_2, flag=wx.GROW)
layout.Add(radiobutton_3, flag=wx.GROW)
layout.Add(radiobutton_4, flag=wx.GROW)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

ラジオボタンを選択すると、ステータスバーにそれぞれ違ったメッセージが入ります。

wxPython_radiobutton_05



ラジオボタンの選択状態の設定は「SetValue」、取得が「GetValue」です。 設定・取得どちらのケースでも「True」がチェックが付いている状態で、「False」がチェックの付いていない状態となります。

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

radiobutton_1 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン1")
radiobutton_2 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン2")
radiobutton_3 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン3")
radiobutton_4 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン4")

radiobutton_1.SetValue(True)
radiobutton_2.SetValue(True)
radiobutton_3.SetValue(True)
radiobutton_4.SetValue(True)

print radiobutton_1.GetValue()
print radiobutton_2.GetValue()
print radiobutton_3.GetValue()
print radiobutton_4.GetValue()

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radiobutton_1, flag=wx.GROW)
layout.Add(radiobutton_2, flag=wx.GROW)
layout.Add(radiobutton_3, flag=wx.GROW)
layout.Add(radiobutton_4, flag=wx.GROW)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

上記サンプルは全てのラジオボタンが「True」に設定されていますが、グループ化されているラジオボタン内では常に1つしか選択状態とならないため、最後に「True」としたラジオボタン4が選択されている状態となります。

wxPython_radiobutton_06



今までのサンプルコードでは、全てのラジオボタンが1つのグループと見なされ、4つのラジオボタンの中から1つしか選択する事が出来ませんでした。別個の選択肢を作成する場合は「style」に「RB_GROUP」を指定します。これを指定すると、次の「RB_GROUP」指定があるまでは同一のグループとして識別されます。

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

radiobutton_1 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン1", style=wx.RB_GROUP)
radiobutton_2 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン2")
radiobutton_3 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン3", style=wx.RB_GROUP)
radiobutton_4 = wx.RadioButton(panel, wx.ID_ANY, u"ラジオボタン4")

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(radiobutton_1, flag=wx.GROW)
layout.Add(radiobutton_2, flag=wx.GROW)
layout.Add(radiobutton_3, flag=wx.GROW)
layout.Add(radiobutton_4, flag=wx.GROW)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

「ラジオボタン1」と「ラジオボタン2」が1つのグループで、「ラジオボタン3」と「ラジオボタン4」が別のグループとなります。両グループは別個のグループですので、当然それぞれのグループから1つずつ選択する事が出来ます。

wxPython_radiobutton_07




Python
スタートブック


入門 Python 3


Effective
Python


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

 
 
 

RadioButtonよりも使いやすい!?

▶GUI:RadioBox



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




P  R