Look at the Bright side of things

Anderson's Blog - since 2005

wxFormBuilderでカスタムコントロールを使う


Pythonを使って業務用システムを開発しているのだが、まさかCUIですべてを済ますわけにも行かず、GUIを利用せねばならない。
Pythonで使えるGUIというと、tkinterとかwxPython、kivyなどになるようで、調べてみた結果、Pythonの開祖、ヴァンロッサム氏が標準にしたかったよ、みたいなことを言ってるので、wxPythonで開発することにした。

さまざまなチュートリアルサイトを参考にしつつ、プログラムを学んでいくのだが、GUIの画面をコードバチバチ叩きながらデザインするのは骨が折れる。RADツールはないかいなと検索してみたところ、wxFormBuilderを発見し、インストール。
このツール、結構癖があるけれど、手書きでコード叩くよりは楽にデザインできる。
ところが、ツールパレットから貼り付け可能なコントロールは限られていて、wxPythonで用意されている数値のみを入力可能なintCtrlやらNumCtrl、小数入力が可能なFloatSpinをそのままでは利用できない。業務用アプリでは数値の入力は必須で、できれば数値以外の入力を制限したいのだが、textCtrlは何でも受け付けてしまう。
キープレスイベントを検出して数値以外を撥ねてよいのだがめんどい。いい方法はないかと見てみると、wxFormBuilderのツールパレットのAdditionalタブにCustom Controlというのを見つけた。

f:id:anderson:20200320180805p:plain

wxFormBuilder Custom Control

どうやら自分でコントロールを指定できるらしい。
設定方法は簡単で、コントロールを追加したあと、コントロールのプロパティに、importするパッケージと、Constructionを指定するだけ。こんな感じ。

f:id:anderson:20200320180801p:plain

wxFormBuilder Custom Control

ソース画面を見ながら書き込むと変更が反映されてわかりやすいかもしれない。wxPythonは日本語で説明してくれる情報ソースが割とあるので助かる。ほんとは書籍などがもっとたくさんあるといいのだけれど。