Look at the Bright side of things

Anderson's Blog - since 2005

wxFormBuilder備忘録

メモ的なもの。

インストールについて

インストールと運用はこのページを参考にした。
naonaorange.hatenablog.com
Mac版をGitHubのページからZipファイルをダウンロードして使っているのだが、試しにソースコードからインストールしてみたところ、フォントがぼやけたり、プロパティ記述エリアが真っ黒になってしまったりと、あんまり良くなかった。

Panelについて

wxPythonの作成チュートリアルなどではFrameの下にPanelを置くようになっている。例えば下記のような感じ。

import wx

application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, 'テストフレーム', size=(600, 300))
panel = wx.Panel(frame, wx.ID_ANY)
panel.SetBackgroundColour('#AFAFAF')

ところがwxFormBuilderではFrameの直下にはPanelを置くことができない。下記のようにBoxSizerなどを配置して、その下に置くほかない。
f:id:anderson:20200322230341p:plain
間違えやすいのだが、このときに追加するPanelは上の画像にあるContainersタブの中にあるPanelを選択しなければならない。Formsタブの中にもPanelがあるが、こちらはFrameの中にもSizerの中にも入らない。

IDについて

通常はwx.ID_ANYで問題ないのだが、下記のようにコントロールにユニークなIDをもたせたい時がある。

button_samp = wx.Button(panel, wx.ID_ANY, 'sample')
button_ok = wx.Button(panel, 1001, 'OKボタン')
button_no= wx.Button(panel, 1002, 'Noボタン')

wxFormBuilderのコントロールプロパティにそのまま、上記の例のIDである、1001や1002を入力するとコード生成はできるのだが実行時にエラーになる。生成されたコードを見るとimport文の直下が下記のようになっている。

import wx
import wx.xrc

1001 = 1000
1002 = 1001

どうやらIDは自動生成されて、コントロールに指定したIDを名称とする変数に割り当てられるようで、上記の例では変数名1001に1000が割り当てられてしまっている。もちろん、Pythonの変数命名規則に反しているのでエラーになる。なので、コントロールのID欄には下記のようになるよう、id_okなどといった変数名を入力してやらねばならない。

import wx
import wx.xrc

id_ok= 1000
id_no = 1001
Pythonコード生成について

Genarate Codeを選択してPythonのコードを生成すると、インデントがタブになってしまう。実行の際には問題にならないが、見栄え的に良くはない。これについてはProject のプロパティの下の方にある、Python Propertiesの中の、indent_with_spacesをチェックすることでスペース4個でインデントしてくれる。ただし、クラス生成(Generate Inherited Class)には効果なし。