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


Button

wxPythonにおける最も基本的な部品の一つであるButtonの紹介です。

様々なイベントの起点となる部品でもあるので、是非覚えておきましょう。

パネルへボタンを追加しています。

コンストラクタには(親ウィンドウ、識別子、ラベル)の順番で渡しています。

#! c:/Python26/python.exe
# -*- coding: utf-8 -*- 

import wx

if __name__ == "__main__":

    application = wx.App()
    frame = wx.Frame(None,wx.ID_ANY,"テストフレーム",size=(300,200))

    panel = wx.Panel(frame,wx.ID_ANY)
    panel.SetBackgroundColour("#AFAFAF")

    button_1 = wx.Button(panel,wx.ID_ANY,"ボタン1")
    button_2 = wx.Button(panel,wx.ID_ANY,"ボタン2")
    button_3 = wx.Button(panel,wx.ID_ANY,"ボタン3")
    
    layout = wx.BoxSizer(wx.VERTICAL)
    layout.Add(button_1)
    layout.Add(button_2)
    layout.Add(button_3)

    panel.SetSizer(layout)

    frame.Show()
    application.MainLoop()

--実行結果--

wxPython_button_01



先程のサンプルではコンストラクタにてラベル(ボタンに表示される文字)を指定していました。

もちろんラベルを変更する関数も用意されています。

#! c:/Python26/python.exe
# -*- coding: utf-8 -*- 

import wx

if __name__ == "__main__":

    application = wx.App()
    frame = wx.Frame(None,wx.ID_ANY,"テストフレーム",size=(300,200))

    panel = wx.Panel(frame,wx.ID_ANY)
    panel.SetBackgroundColour("#AFAFAF")

    button_1 = wx.Button(panel,wx.ID_ANY,"ボタン1")
    button_2 = wx.Button(panel,wx.ID_ANY,"ボタン2")
    button_3 = wx.Button(panel,wx.ID_ANY,"ボタン3")

    button_3.SetLabel("Button3")
    
    layout = wx.BoxSizer(wx.VERTICAL)
    layout.Add(button_1)
    layout.Add(button_2)
    layout.Add(button_3)

    panel.SetSizer(layout)

    frame.Show()
    application.MainLoop()

--実行結果--

button_3のラベルが「ボタン3」ではなく「Button3」となりました。

wxPython_button_02



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

#! c:/Python26/python.exe
# -*- coding: utf-8 -*- 

import wx

if __name__ == "__main__":

    application = wx.App()
    frame = wx.Frame(None,wx.ID_ANY,"テストフレーム",size=(300,200))

    panel = wx.Panel(frame,wx.ID_ANY)
    panel.SetBackgroundColour("#AFAFAF")

    button_1 = wx.Button(panel,wx.ID_ANY,"ボタン1")
    button_2 = wx.Button(panel,wx.ID_ANY,"ボタン2")
    button_3 = wx.Button(panel,wx.ID_ANY,"ボタン3",size=(50,50))
    button_4 = wx.Button(panel,wx.ID_ANY,"ボタン4")
    
#   button_3.SetSize((50,50))
#   button_3.SetMaxSize((50,50))
#   button_3.SetMinSize((50,50))
    
    layout = wx.GridSizer(2,2)
    layout.Add(button_1)
    layout.Add(button_2)
    layout.Add(button_3)
    layout.Add(button_4)

    panel.SetSizer(layout)

    frame.Show()
    application.MainLoop()

--実行結果--

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

wxPython_button_03



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

#! c:/Python26/python.exe
# -*- coding: utf-8 -*- 

import wx

if __name__ == "__main__":

    application = wx.App()
    frame = wx.Frame(None,wx.ID_ANY,"テストフレーム",size=(300,200))

    panel = wx.Panel(frame,wx.ID_ANY)
    panel.SetBackgroundColour("#AFAFAF")

    button_1 = wx.Button(panel,wx.ID_ANY,"ボタン1")
    button_2 = wx.Button(panel,wx.ID_ANY,"ボタン2")
    button_3 = wx.Button(panel,wx.ID_ANY,"ボタン3")
    button_4 = wx.Button(panel,wx.ID_ANY,"ボタン4")
    
    font = wx.Font(20,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_NORMAL)
    button_3.SetFont(font)
    
    layout = wx.GridSizer(2,2)
    layout.Add(button_1,0,wx.GROW)
    layout.Add(button_2,0,wx.GROW)
    layout.Add(button_3,0,wx.GROW)
    layout.Add(button_4,0,wx.GROW)

    panel.SetSizer(layout)

    frame.Show()
    application.MainLoop()

--実行結果--

「ボタン3」の文字の大きさを変更しました。

wxPython_button_0



ボタンの文字色の変更には「SetForegroundColour」関数を使用します。サンプルでは赤へ変更しています。

#! c:/Python26/python.exe
# -*- coding: utf-8 -*- 

import wx

if __name__ == "__main__":

    application = wx.App()
    frame = wx.Frame(None,wx.ID_ANY,"テストフレーム",size=(300,200))

    panel = wx.Panel(frame,wx.ID_ANY)
    panel.SetBackgroundColour("#AFAFAF")

    button_1 = wx.Button(panel,wx.ID_ANY,"ボタン1")
    button_2 = wx.Button(panel,wx.ID_ANY,"ボタン2")
    button_3 = wx.Button(panel,wx.ID_ANY,"ボタン3")
    button_4 = wx.Button(panel,wx.ID_ANY,"ボタン4")
    
    button_3.SetForegroundColour("#FF0000")
    
    layout = wx.GridSizer(2,2)
    layout.Add(button_1,0,wx.GROW)
    layout.Add(button_2,0,wx.GROW)
    layout.Add(button_3,0,wx.GROW)
    layout.Add(button_4,0,wx.GROW)

    panel.SetSizer(layout)

    frame.Show()
    application.MainLoop()

--実行結果--

「ボタン3」文字色を赤へ変更しました。

wxPython_button_05



ボタンの背景色の変更は「SetBackgroundColour」関数を使用します。サンプルでは青へ変更しています。

#! c:/Python26/python.exe
# -*- coding: utf-8 -*- 

import wx

if __name__ == "__main__":

    application = wx.App()
    frame = wx.Frame(None,wx.ID_ANY,"テストフレーム",size=(300,200))

    panel = wx.Panel(frame,wx.ID_ANY)
    panel.SetBackgroundColour("#AFAFAF")

    button_1 = wx.Button(panel,wx.ID_ANY,"ボタン1")
    button_2 = wx.Button(panel,wx.ID_ANY,"ボタン2")
    button_3 = wx.Button(panel,wx.ID_ANY,"ボタン3")
    button_4 = wx.Button(panel,wx.ID_ANY,"ボタン4")
    
    button_3.SetBackgroundColour("#0000FF")
    
    layout = wx.GridSizer(2,2)
    layout.Add(button_1,0,wx.GROW)
    layout.Add(button_2,0,wx.GROW)
    layout.Add(button_3,0,wx.GROW)
    layout.Add(button_4,0,wx.GROW)

    panel.SetSizer(layout)

    frame.Show()
    application.MainLoop()

--実行結果--

「ボタン3」背景色を青へ変更しました。

wxPython_button_06



ボタンを無効(押せない状態)にするには「Disable」関数を使用します。それとは逆に無効状態となっているボタンを有効(押せる状態)へ変更するには「Enable」関数を使用しましょう。

#! c:/Python26/python.exe
# -*- coding: utf-8 -*- 

import wx

if __name__ == "__main__":

    application = wx.App()
    frame = wx.Frame(None,wx.ID_ANY,"テストフレーム",size=(300,200))

    panel = wx.Panel(frame,wx.ID_ANY)
    panel.SetBackgroundColour("#AFAFAF")

    button_1 = wx.Button(panel,wx.ID_ANY,"ボタン1")
    button_2 = wx.Button(panel,wx.ID_ANY,"ボタン2")
    button_3 = wx.Button(panel,wx.ID_ANY,"ボタン3")
    button_4 = wx.Button(panel,wx.ID_ANY,"ボタン4")
    
    button_3.Disable()
#   button_3.Enable()
    
    layout = wx.GridSizer(2,2)
    layout.Add(button_1,0,wx.GROW)
    layout.Add(button_2,0,wx.GROW)
    layout.Add(button_3,0,wx.GROW)
    layout.Add(button_4,0,wx.GROW)

    panel.SetSizer(layout)

    frame.Show()
    application.MainLoop()

--実行結果--

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

wxPython_button_07



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

#! c:/Python26/python.exe
# -*- coding: utf-8 -*- 

import wx

if __name__ == "__main__":

    application = wx.App()
    frame = wx.Frame(None,wx.ID_ANY,"テストフレーム",size=(300,200))

    panel = wx.Panel(frame,wx.ID_ANY)
    panel.SetBackgroundColour("#AFAFAF")

    button_1 = wx.Button(panel,wx.ID_ANY,"ボタン1")
    button_2 = wx.Button(panel,wx.ID_ANY,"ボタン2")
    button_3 = wx.Button(panel,wx.ID_ANY,"ボタン3")
    button_4 = wx.Button(panel,wx.ID_ANY,"ボタン4")
    
    button_3.SetToolTipString("python-izm.com")
    
    layout = wx.GridSizer(2,2)
    layout.Add(button_1,0,wx.GROW)
    layout.Add(button_2,0,wx.GROW)
    layout.Add(button_3,0,wx.GROW)
    layout.Add(button_4,0,wx.GROW)

    panel.SetSizer(layout)

    frame.Show()
    application.MainLoop()

--実行結果--

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

wxPython_button_08



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

#! c:/Python26/python.exe
# -*- coding: utf-8 -*- 

import wx

if __name__ == "__main__":

    application = wx.App()
    frame = wx.Frame(None,wx.ID_ANY,"テストフレーム",size=(300,200))

    panel = wx.Panel(frame,wx.ID_ANY)
    panel.SetBackgroundColour("#AFAFAF")

    button_1 = wx.Button(panel,wx.ID_ANY,"ボタン1")
    button_2 = wx.Button(panel,wx.ID_ANY,"ボタン2")
    button_3 = wx.Button(panel,wx.ID_ANY,"ボタン3")
    button_4 = wx.Button(panel,wx.ID_ANY,"ボタン4")
    
    button_3.Hide()
#   button_3.Show()
    
    layout = wx.GridSizer(2,2)
    layout.Add(button_1,0,wx.GROW)
    layout.Add(button_2,0,wx.GROW)
    layout.Add(button_3,0,wx.GROW)
    layout.Add(button_4,0,wx.GROW)

    panel.SetSizer(layout)

    frame.Show()
    application.MainLoop()

--実行結果--

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

wxPython_button_09



ボタンへイベントを設定するには「Bind」関数を使用します。

引数には(イベント種別、イベント発生時に呼び出す関数)の順番で値を渡し、「ボタン1」と「ボタン2」ではそれぞれ違う関数を定義してイベント設定しています。

「ボタン3」と「ボタン4」では、引数に「イベント発生元」を追加し、ボタン初期化時のIDで判別して挙動を変えています。尚、サンプルでもあるように、ボタン・フレームのどちらにBindしてもイベントはきちんと動作します。

#! c:/Python26/python.exe
# -*- coding: utf-8 -*- 

import wx


def click_button_1(event):
    frame.SetStatusText("Click! button_1")

def click_button_2(event):
    frame.SetStatusText("Click! button_2")

def click_button(event):
    if event.GetId() == 3333:
        frame.SetStatusText("Click! button_3")
    elif event.GetId() == 4444:
        frame.SetStatusText("Click! button_4")


if __name__ == "__main__":

    application = wx.App()
    frame = wx.Frame(None,wx.ID_ANY,"テストフレーム",size=(300,200))
    frame.CreateStatusBar()

    panel = wx.Panel(frame,wx.ID_ANY)
    panel.SetBackgroundColour("#AFAFAF")

    button_1 = wx.Button(panel,wx.ID_ANY,"ボタン1")
    button_2 = wx.Button(panel,wx.ID_ANY,"ボタン2")
    button_3 = wx.Button(panel,3333,"ボタン3")
    button_4 = wx.Button(panel,4444,"ボタン4")
    
    button_1.Bind(wx.EVT_BUTTON,click_button_1)
    button_2.Bind(wx.EVT_BUTTON,click_button_2)
    frame.Bind(wx.EVT_BUTTON,click_button,button_3)
    frame.Bind(wx.EVT_BUTTON,click_button,button_4)
    
    layout = wx.GridSizer(2,2)
    layout.Add(button_1,0,wx.GROW)
    layout.Add(button_2,0,wx.GROW)
    layout.Add(button_3,0,wx.GROW)
    layout.Add(button_4,0,wx.GROW)

    panel.SetSizer(layout)

    frame.Show()
    application.MainLoop()

--実行結果--

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

wxPython_button_10



Python
スタートブック

みんなのPython
第3版

Pythonでかんたん
Androidプログラミング

Pythonプロフェッショナル
プログラミング

こちらもGUIアプリケーションには欠かせません!

▶GUI:StaticText


Kindle Fire HD




P  R