wxFormBuilderでデスクトップアプリ作成の基礎

SpyderとwxFormBuilderを使ってPythonデスクトップアプリ作成の基礎メモ

1. まずはSpyderで新規プロジェクトを作成

  1. Spyderを起動して[プロジェクト]-[新規プロジェクト]でプロジェクトのフォルダーを作る

2. wxFormBuilderでNew_Projectを作成

  1. wxFormBuilderを起動して新規プロジェクトを作成
  2. Spyderのプロジェクトのフォルダーに名前を付けて保存
  3. projectのnameを設定
  4. projectのfileを設定(この名前で画面を記述したpyファイルが作られる)
  5. code_generationをC++からpythonに変更
  6. Formsタブから一番左のFrameをクリックして追加(必要なら名前を付け替え)
  7. Frameの名前を変更Main(この名前でクラスが作られる)
  8. Frameのtitleとウインドウ表示時のサイズを設定

3. メニューの追加

  1. Menu/ToolbarタブからwxMenubarをクリックして追加
  2. Menu/ToolbarタブからwxMenuをクリックしてwxMenubarの下に追加
  3. wxMenuのlabelを変更
  4. Menu/ToolbarタブからwxMenuItemをクリックしてwxMenuの下に追加
  5. wxMenuItemのnameとlabelを変更
  6. wxMenuItemのEventsを開いてOnMenuSelectionをクリックしイベントを追加

4. ステータスバーの追加

  1. Menu/ToolbarタブからwxStatusBarをクリックして追加
  2. ステータスバーに表示する時に使用するnameを設定
    ステータスバーとツールバーは最下端と最上端に固定されている

5. パネルの設定

  1. LayoutのwxBoxSizerを使用して画面にwidgetを配置していく
  2. wxBoxSizerのorientを変更してwidgetを縦に配置するか横に配置するかを決める
  3. wxBoxSizerの中のwidgetが占める割合はproportionの値の比で決まる。
  4. proportionが0の時は内包するwidgetに合わせて最小のサイズが設定される
  5. フォントを変えたい時には上位のものを変えれば下位に継承される
    但しwxFormBuilder上では反映されないのでプログラムを実行しながら調整

6. 画面記述のコードと、それを継承したクラスのコードを作成

  1. File-Generate_Codeで画面クラスを記述したpyファイルを作成
    このファイルは手修正してはいけない
  2. Tools-Generate_Inherited_Classで画面クラスを継承したクラスファイルを作成
    継承クラスを作るフレームをチェック
    クラスを選ぶことで継承クラス名を好きに変えることも出来る。
    このファイルは書き変えていくので作成は一度のみ

7. プログラムの実行

  1. Spyderでmain.pyファイルを作り実行する。
import wx
import win32gui
import o3dMain

class MyApp(wx.App):
    def OnInit(self):
        #画面を継承したクラスのインスタンスを作る
        frame = o3dMain.o3dMain(None)
        self.SetTopWindow(frame)
        frame.Show(True)
        return True

if __name__ == '__main__':
    #ウインドウタイトルを検索して2重起動を抑止
    if win32gui.FindWindow(None,"Open3Dtest") == 0:
        app = MyApp(False)
        app.MainLoop()

2重起動の防止は

    if win32gui.FindWindow(None,"Open3Dtest") == 0:

で同じウインドウ名がない事を確認してから起動する事で行う。
同じ名称のフォルダーがあって、エクスプローラで開いていると、アプリが起動しないので注意。

表示位置の場所&サイズ指定は 上記に

        frame.Move( 795, 0)
        frame.SetSize(800, 840)

等を加えればいい。

以降は画面クラスのファイルは自動生成し継承クラスのファイルのみ修正しながらプログラムを作る 分かりやすいようにパネルのバックグランドに色を付けてある。