IronPythonでWindowsフォームアプリケーション
IronPythonはVisualStudioのフォームデザイナを使って、Windowsフォームアプリケーションも作れるので、試しに電卓を作ってみました。
フォームデザイナでコントロールのプロパティを編集すると、ちゃんとPythonのソースコードが変化します。ちょっと感動。
実は私は.NET Frameworkを使うのはこれが初めてですが、かなり使いやすい印象を受けました。Pythonの文法も簡単だし、フォームデザイナも使いやすいし、この組み合わせは最強のRADツールになるかもしれません。
今回作ってみた電卓アプリケーションをせっかくなので置いておきます。
ソースコードと実行ファイル入りです。IronPythonはexeを出力するので、実行の際にはIronPythonのインストールは必要ないようです。(.NET Framework 2.0は必要)
…と良いことばかり書いていますが、実際はかなり悪戦苦闘しましたw
特に悩まされたのが、Pythonの文法でも.NET Frameworkでもなく、フォームデザイナの挙動です。
まず、ウィザードによってSystem.Windows.Forms.Formを継承したクラスForm1が作られますが、このクラスに独自のデータ属性(C++風に言うとメンバ変数)を追加しようとしたらアウト。
基本的にPythonのクラスでは、宣言無しでいつでもメンバ変数を追加できるのですが、__slots__という特殊な変数を定義すると、ここで宣言されている変数以外をクラスに追加することができなくなります。ウィザードが生成したコードにはこれが使われていました。
__slots__をコメントアウトするとコンパイルは通って実行はできますが、フォームデザイナが動かなくなりました。デザイナの動作に必要なようです。ただし、__slots__に変数の名前を追加するだけでは駄目で、__slots__の定義の前にあるdocstringの中でtype(hoge) == Dummyのように型を指定してあげる必要があります。(宣言さえあれば型名は何でもいいらしい)
次に、電卓のボタンにフォーカスを与えないために、System.Windows.Forms.Control.SetStyle()メソッド呼び出しを各ボタンの設定部分に書き加えたら、またもやフォームデザイナでエラーが発生しました。基準が良く分からないのですが、フォームのコンストラクタ内では、コントロールのプロパティ操作以外は駄目っぽいです。
また、デザイナを操作していると、ソースコード上で最後に書かれているメンバ関数が消滅してしまうことがよくあります。これはもうどうしようもない。はやく直してください :-(
ifを書くときに入力補助機能がおかしな動作をして、たまに2~3行ほど空行を勝手に挿入しますが、その空行にtabが混ざっているのも問題です。Pythonではtab8を想定していますがVisualStudioのエディタではtab4なので、tabが入っていると見た目とコンパイラに解釈されるインデントの深さが異なってしまいます。インデントの深さでブロックを定義するPythonでは致命的です。
まだまだプログラミングツールとしては、使い物にならない状態ですね。現在、IronPython2.0が物凄い勢いで開発されていますが、そちらが完成したらIDEの方も頑張ってもらいたいです。
カテゴリ
プログラミングトラックバック(0)
このブログ記事に対するトラックバックURL: http://niisaka.s33.xrea.com/x/mt/mt-tb.cgi/217


コメントする