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


ToggleButton

本項で紹介するのはToggleButton(トグルボタン)です。見た目は普通のボタンと変わりませんが、「ON」「OFF」の状態を設定出来るので、機能としてはチェックボックスに近いものがあります。

パネルへトグルボタンを追加しています。引数には(親ウィンドウ、識別子、ラベル)の順番で渡しています。

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

t_button_1 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン1")
t_button_2 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン2")
t_button_3 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン3")

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(t_button_1)
layout.Add(t_button_2)
layout.Add(t_button_3)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

トグルボタンをクリックすると、「ON」の状態となり見た目が少し変わります。

wxPython_togglebutton_01



ラベル(トグルボタンに表示される文字)を変更するには「SetLabel」を使用します。

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

t_button_1 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン1")
t_button_2 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン2")
t_button_3 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン3")

t_button_2.SetLabel("togglebutton2")

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(t_button_1)
layout.Add(t_button_2)
layout.Add(t_button_3)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

t_button_2のラベルが「トグルボタン2」ではなく「togglebutton2」となりました。

wxPython_togglebutton_02



トグルボタンのサイズを変更するにはコンストラクタへ「size」を渡します。 「SetSize」「SetMaxSize」「SetMinSize」でも設定可能ですが、Sizerの設定に依存する場合もあるので注意しましょう。

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

t_button_1 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン1")
t_button_2 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン2", size=(150,50))
t_button_3 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン3")

#t_button_2.SetSize((150, 50))
#t_button_2.SetMaxSize((150, 50))
#t_button_2.SetMinSize((150, 50))

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(t_button_1)
layout.Add(t_button_2)
layout.Add(t_button_3)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

サイズ変更をした「トグルボタン2」のみ大きさが違います。

wxPython_togglebutton_03



トグルボタンのフォント(文字の大きさや太字設定)を変更するには「SetFont」を使用します。15行目にて使用するFontクラスを初期化しています。

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

t_button_1 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン1")
t_button_2 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン2")
t_button_3 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン3")

font = wx.Font(20, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
t_button_2.SetFont(font)

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(t_button_1)
layout.Add(t_button_2)
layout.Add(t_button_3)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

「トグルボタン2」の文字の大きさを変更しました。

wxPython_togglebutton_0



トグルボタンを無効(押せない状態)にするには「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")

t_button_1 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン1")
t_button_2 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン2")
t_button_3 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン3")

t_button_2.Disable()
#t_button_2.Enable()

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(t_button_1)
layout.Add(t_button_2)
layout.Add(t_button_3)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

「トグルボタン2」が押せない状態となっています。

wxPython_togglebutton_05



トグルボタンへツールチップ(補足情報を載せる小さいウィンドウ)を表示させるには「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")

t_button_1 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン1")
t_button_2 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン2")
t_button_3 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン3")

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

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(t_button_1)
layout.Add(t_button_2)
layout.Add(t_button_3)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

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

wxPython_togglebutton_06



トグルボタンを非表示にするには「Hide」を使用しましょう。 非表示状態のトグルボタンを表示させるには「Show」を用います。 なおトグルボタンは「見えない」だけで本体は存在しています。 非表示状態のボタンに対してラベル設定をしたりする事も可能です。

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

t_button_1 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン1")
t_button_2 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン2")
t_button_3 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン3")

t_button_2.Hide()
#t_button_2.Show()

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(t_button_1)
layout.Add(t_button_2)
layout.Add(t_button_3)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

「トグルボタン2」が隠れています。見えないだけなのでプログラム上で操作してもエラーとはなりません。

wxPython_togglebutton_07



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

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

import wx

def click_togglebutton_1(event):
    frame.SetStatusText("Click! t_button_1")

def click_togglebutton_2(event):
    frame.SetStatusText("Click! t_button_2")

def click_togglebutton(event):
    if event.GetId() == 1234:
        frame.SetStatusText("Click! t_button_3")
    elif event.GetId() == 5678:
        frame.SetStatusText("Click! t_button_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")

t_button_1 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン1")
t_button_2 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン2")
t_button_3 = wx.ToggleButton(panel, 1234, u"トグルボタン3")
t_button_4 = wx.ToggleButton(panel, 5678, u"トグルボタン4")

t_button_1.Bind(wx.EVT_TOGGLEBUTTON, click_togglebutton_1)
t_button_2.Bind(wx.EVT_TOGGLEBUTTON, click_togglebutton_2)
frame.Bind(wx.EVT_TOGGLEBUTTON, click_togglebutton, t_button_3)
frame.Bind(wx.EVT_TOGGLEBUTTON, click_togglebutton, t_button_4)

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(t_button_1)
layout.Add(t_button_2)
layout.Add(t_button_3)
layout.Add(t_button_4)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

トグルボタンを押すと、ステータスバーにそれぞれ違ったメッセージが入ります。

wxPython_togglebutton_08



トグルボタンのステート(ON・OFF状態)の設定は「SetValue」を使用し、取得は「GetValue」を使用します。 設定・取得どちらのケースでも「True」が「ON」の状態で、「False」が「OFF」の状態となります。

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

t_button_1 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン1")
t_button_2 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン2")
t_button_3 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン3")
t_button_4 = wx.ToggleButton(panel, wx.ID_ANY, u"トグルボタン4")

t_button_1.SetValue(True)
t_button_2.SetValue(True)
t_button_3.SetValue(False)
t_button_4.SetValue(False)

print t_button_1.GetValue()
print t_button_2.GetValue()
print t_button_3.GetValue()
print t_button_4.GetValue()

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(t_button_1)
layout.Add(t_button_2)
layout.Add(t_button_3)
layout.Add(t_button_4)

panel.SetSizer(layout)

frame.Show()
application.MainLoop()

--実行結果--

print文で出力されるステートは、上から「True」「True」「False」「False」となります。

wxPython_togglebutton_09




Python
スタートブック


入門 Python 3


Effective
Python


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

 
 
 

数値の設定で便利に使いましょう!

▶GUI:Slider



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




P  R