PythonのGUIのおすすめはwxPythonとwxFormBuilderです。wxPythonはwxWidgetをPythonからいじれるようにしたもので、wxFormBuilderはGUIのコードをさくさくっと自動生成してくれるソフトです。
インストール
Ubuntuで開発する場合。
Ubuntu Software CenterでwxPythonを検索、インストール
http://wxformbuilder.org/から最新バージョンをダウンロード、インストール
- wxformbuilder_3.3.01-0ubuntu1\~lucid1_i386.debが最新(2012.2.12)
- Software Centerのビルドは3.1で、Pythonコードの生成ができないので不便(2012.2.12)
gtk2-engines-pixbufをインストール
- sudo apt-get install gtk2-engines-pixbuf をターミナルにて実行
- (python:4974): Gtk-WARNING **: Unable to locate theme engine in module_path: "pixmap"というエラーが出ます。
wxFormBuilderの使い方
プロジェクトを作成する
新規のプロジェクトを作成します。ProjectのPropertiesに、name,path,file,code_generationという設定項目があるので、それぞれを適切な値に設定します。Pythonを使う場合は、code_generationのPythonにチェックを入れておきます。
GUIを作成する
Component Paletteが右上部にありますので、ここから追加したいものをクリックすると追加されます。クリックしても追加できない場合は、別のものを追加しましょう。一般的には、FormsのFrameをはじめに追加し、Layoutの趣味なものを追加し、そこにボタンやラベルなどを追加している感じでしょうか。
VMGtoEMLのGUIの作成画面です。
イベントを作成する
GUIのコンポーネントにはイベントを登録することができます。というか、これができないとGUIの意味がないのですが。
イベントは簡単で、イベントを割り当てたいコンポーネントをクリックして、Eventタブの中にある適切なイベント名の横に呼び出したいメソッド名を追加するだけです。(注意)wxFormBuilderのバージョンが低いと、Pythonコードの書き出しができないので、Eventが使えません。できるだけ最新のものを使用することをおすすめします。みーはこれではまりました。
Pythonコードを書きだす
F8を押します。これだけです。生成されたPythonコードはこのようになると思います。
# -*- coding: utf-8 -*- ########################################################################### ## Python code generated with wxFormBuilder (version Feb 9 2012) ## http://www.wxformbuilder.org/ ## ## PLEASE DO "NOT" EDIT THIS FILE! ########################################################################### import wx import wx.xrc wx.ID_BUTTON_Convert = 1000 ########################################################################### ## Class mainFrame ########################################################################### class mainFrame ( wx.Frame ): def __init__( self, parent ): ... def __del__( self ): pass # Virtual event handlers, overide them in your derived class def convert( self, event ): event.Skip()
継承クラスを書きだす
F6を押します。これだけです。生成されたPythonコードはこのようになると思います。
"""Subclass of mainFrame, which is generated by wxFormBuilder.""" import wx import gui # Implementing mainFrame class MyProject1mainFrame( gui.mainFrame ): def __init__( self, parent ): gui.mainFrame.__init__( self, parent ) self.Show() # Handlers for mainFrame events. def convert( self, event ): # TODO: Implement convert pass
#TODOの部分に処理を書きます。wxFormBuilderのデフォルトのコードでは、wx.frame.Show()が実行されないので、付け加える必要があります。
wx.Appの継承クラスを作成する
import wx import MyProject1mainFrame class MyApp(wx.App): def __init__(self, redirect=False, filename=None): wx.App.__init__(self, redirect, filename) self.frame = MyProject1mainFrame.MyProject1mainFrame(None) if __name__ == "__main__": app = MyApp() app.MainLoop()
オレンジの部分はそれぞれの場合に適した名前に置き換えてください。参考:http://wiki.wxpython.org/Using%20wxPython%20Demo%20Code
これで完成です。wx.Appの継承クラスを実行すれば、ウインドウが表示されるはずです。
Tips
(python:4974): Gtk-WARNING **: Unable to locate theme engine in module_path: "pixmap"とエラーが出る
まず、gtk2-engines-pixbufをインストールし、
sudo apt-get install gtk2-engines-pixbuf
をターミナルにて実行