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


MenuBar

GUIアプリケーションの上部に表示され、終了や保存などの様々なアクションの起点ともなるMenuBarの紹介です。本項ではMenuおよびMenuItemについても扱います。

「Append」を使用して「Menu」を追加し、Frameの「SetMenuBar」にてメニューバーをセットします。

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

menu_file = wx.Menu()
menu_edit = wx.Menu()

menu_bar = wx.MenuBar()
menu_bar.Append(menu_file, u"ファイル")
menu_bar.Append(menu_edit, u"編集")

frame.SetMenuBar(menu_bar)

frame.Show()
application.MainLoop()

--実行結果--

まだ「MenuItem」を追加していないので、クリックしても何も表示されません。

wxPython_menubar_01



「Menu」クラスの「Append」を使用してアイテムを追加します。引数は(識別子, タイトル)の順番です。

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

menu_file = wx.Menu()
menu_file.Append(1, u"保存")
menu_file.Append(2, u"終了")

menu_edit = wx.Menu()
menu_edit.Append(3, u"コピー")
menu_edit.Append(4, u"貼り付け")

menu_bar = wx.MenuBar()
menu_bar.Append(menu_file, u"ファイル")
menu_bar.Append(menu_edit, u"編集")

frame.SetMenuBar(menu_bar)

frame.Show()
application.MainLoop()

--実行結果--

メニューバーの項目をクリックすると、追加したアイテムが展開されます。

wxPython_menubar_02



メニューにセパレータを追加するには「AppendSeparator」を利用しましょう。

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

menu_file = wx.Menu()
menu_file.Append(1, u"保存")
menu_file.Append(2, u"終了")

menu_edit = wx.Menu()
menu_edit.Append(3, u"コピー")
menu_edit.AppendSeparator()
menu_edit.Append(4, u"貼り付け")

menu_bar = wx.MenuBar()
menu_bar.Append(menu_file, u"ファイル")
menu_bar.Append(menu_edit, u"編集")

frame.SetMenuBar(menu_bar)

frame.Show()
application.MainLoop()

--実行結果--

「コピー」と「貼り付け」の間にセパレータが追加されました。

wxPython_menubar_03



メニューに対してチェックボックスを追加する事も可能です。 追加したチェックボックスアイテムの値を制御するには「Check」を使用します。

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

menu_file = wx.Menu()
menu_file.Append(1, u"保存")
menu_file.Append(2, u"終了")

menu_edit = wx.Menu()
menu_edit.Append(3, u"コピー")
menu_edit.Append(4, u"貼り付け")
check_item = menu_edit.AppendCheckItem(5, u"チェック")
check_item.Check(True)

menu_bar = wx.MenuBar()
menu_bar.Append(menu_file, u"ファイル")
menu_bar.Append(menu_edit, u"編集")

frame.SetMenuBar(menu_bar)

frame.Show()
application.MainLoop()

--実行結果--

チェックの付いている項目をクリックすると、チェックが外れます。

wxPython_menubar_04



ラジオボタンの追加も可能です。「AppendRadioItem」を使いましょう。

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

menu_file = wx.Menu()
menu_file.Append(1, u"保存")
menu_file.Append(2, u"終了")

menu_edit = wx.Menu()
menu_edit.Append(3, u"コピー")
menu_edit.Append(4, u"貼り付け")
menu_edit.AppendSeparator()
menu_edit.AppendRadioItem(6, u"ラジオ1")
menu_edit.AppendRadioItem(7, u"ラジオ2")

menu_bar = wx.MenuBar()
menu_bar.Append(menu_file, u"ファイル")
menu_bar.Append(menu_edit, u"編集")

frame.SetMenuBar(menu_bar)

frame.Show()
application.MainLoop()

--実行結果--

通常のラジオボタンと同様、どちらか1つしか選択出来ません。

wxPython_menubar_05



メニュー内へサブメニューを追加するには「AppendSubMenu」を使用しましょう。階層化して表示する事で、画面をすっきりと見せる事が出来ます。

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

menu_file = wx.Menu()
menu_file.Append(1, u"保存")
menu_file.Append(2, u"終了")

menu_edit = wx.Menu()
menu_edit.Append(3, u"コピー")
menu_edit.Append(4, u"貼り付け")

menu_edit_do = wx.Menu()
menu_edit_do.Append(5, "undo")
menu_edit_do.Append(6, "redo")
menu_edit.AppendSubMenu(menu_edit_do, u"操作")

menu_bar = wx.MenuBar()
menu_bar.Append(menu_file, u"ファイル")
menu_bar.Append(menu_edit, u"編集")

frame.SetMenuBar(menu_bar)

frame.Show()
application.MainLoop()

--実行結果--

サブメニューが追加されました。「操作」へマウスカーソルを合わせると展開します。

wxPython_menubar_06



メニューへイベントを設定するには「Bind」を使用します。引数には(イベント種別、イベント発生時に呼び出す関数)の順番で値を渡し、呼び出す関数内部では選択されたメニューアイテムのIDを出力しています。

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

import wx

def selectMenu(event):
    frame.SetStatusText("MenuSelected! " + str(event.GetId()))

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

menu_file = wx.Menu()
save_item = menu_file.Append(1, u"保存")
exit_item = menu_file.Append(2, u"終了")

menu_edit = wx.Menu()
copy_item  = menu_edit.Append(3, u"コピー")
paste_item = menu_edit.Append(4, u"貼り付け")

menu_bar = wx.MenuBar()
menu_bar.Append(menu_file, u"ファイル")
menu_bar.Append(menu_edit, u"編集")

frame.Bind(wx.EVT_MENU,selectMenu)

frame.SetMenuBar(menu_bar)

frame.Show()
application.MainLoop()

--実行結果--

メニューを選択すると、ステータスバーにそれぞれのアイテムのIDが入ります。

wxPython_menubar_07




Python
スタートブック


入門 Python 3


Effective
Python


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

 
 
 

地味に役立ちます!

▶GUI:StaticLine



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




P  R