wxPythonでGUIアプリを作る フレーム&メニュー
参考サイトGetting Started - wxPyWiki
wxPythonは、マルチプラットフォームなGUIアプリを比較的簡単に作成することができるモジュールです。wxPythonの使い方について簡単にまとめてみます。
まずはフレームを単に表示するプログラム。
import wx app = wx.App(False) #アプリケーションを作成する frame = wx.Frame(None, wx.ID_ANY, "Hello World") #フレームを作成する frame.Show(True) #フレーム表示 app.MainLoop()
frameのクラス化
wx.Frameクラスを継承させたMyFrameクラスを作成して、上と同じ処理を行います。
import wx class MyFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__(self, parent, title=title, size=(200,100)) #ここにGUIコントロールを追加する処理 self.Show(True) app = wx.App(False) frame = MyFrame(None, 'myFrame') app.MainLoop()
ステータスバーの追加
初期化子__init__()内で、CreateStatusBarを呼び出すとステータスバーを追加することができます。
self.CreateStatusBar()
メニューの追加
初めにwx.Menuクラスを使ってメニューを作成します。このクラスをインスタンス化して、Appendメソッドで新たな選択項目を追加することができます。引数には、イベント(の識別子)、メニュー名、メニュー選択でステータスバーに表示される文字列を設定します。また、メニューの区切りはAppendSeparatorメソッドを利用します。
ここでは試しにファイルと編集メニューを作成してみましょう。
#ファイルメニュー filemenu= wx.Menu() filemenu.Append(wx.ID_NEW, "&New","create new project") filemenu.Append(wx.ID_OPEN, "&Open","open project") filemenu.AppendSeparator() #メニューの区切り線 #編集メニュー editmenu= wx.Menu() editmenu.Append(wx.ID_CUT, "&Cut","cut strings") editmenu.Append(wx.ID_COPY, "&Copy","copy strings")
次にwx.MenuBarを使ってメニューバーを作ります。先ほど作成したメニューをwx.MenuBarクラスのインスタンスに順次追加していきます。
このAppendメソッドの2番目の引数には、メニューバーの名前を指定します。
先ほど作成したとファイル・編集メニューを追加してみましょう。
#メニューバーを作成 menuBar = wx.MenuBar() #ファイルメニューを登録 menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar #編集メニューを登録 menuBar.Append(editmenu,"&Edit") # Adding the "filemenu" to the MenuBar self.SetMenuBar(menuBar)
最後に、作成したメニューバーをMyFrameに登録します。登録するにはSetMenuBarメソッドを呼び出します。
self.SetMenuBar(menuBar)
ここまでで作成したソースコードは次のようになりました。あとは実行させてみると、フレームとメニューが確かに作成されていることが確認できると思います。
import wx class MyFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__(self, parent, title=title, size=(200,100)) #ステータスバーの追加 self.CreateStatusBar() #ファイルメニューの作成 filemenu= wx.Menu() filemenu.Append(wx.ID_OPEN, "&Open","open project") filemenu.AppendSeparator() filemenu.Append(wx.ID_CLOSE, "&Close","close project") #編集メニューの作成 editmenu= wx.Menu() editmenu.Append(wx.ID_CUT, "&Cut","cut strings") editmenu.Append(wx.ID_COPY, "&Copy","copy strings") #メニューバーの作成 menuBar = wx.MenuBar() menuBar.Append(filemenu,"&File") menuBar.Append(editmenu,"&Edit") #メニューバーの登録 self.SetMenuBar(menuBar) self.Show(True) app = wx.App(False) frame = MyFrame(None, 'myFrame') app.MainLoop()