ちょっと学びたいので、簡単なところをやってみた。
PythonWorkshop the Edgeで荒井さんのプレゼンに感動していらいかな?
荒井さんの出してる IronPythonの世界
が欲しい(注、アサマシ)。
IronPythonのインストール
#ipyを実行するカレントにおいておけば大丈夫
Pythonの標準ライブラリを使う場合には、CPython2.4系をインストールして、IronPython/Lib/site.pyでCPythonのライブラリを読み込まなきゃいけないみたい。
CPython2.5系と組み合わせて使う場合は、IronPythonのPython2.5系実装であるIronPython2.0を使わなきゃいけないみたい。
IronPython2.0はまだα。
IronPythonのシェルは、IronPythonを展開したディレクトリにあるipyをコマンドプロンプトから実行すればいいのかな。
VisualStudioとの統合もできるらしい けど、自前で持ってるVisualStudioはVisualStudio.net Professionalというかなり古いやつだから無理だろうなぁ。Standard版でいいからアップグレードで入手しようかなぁ。つか、家にウィンドウズネーゾ(ライセンスは5個くらい持ってるけど、メディアやらライセンスの紙やらを無くしたorz)。むぅ
とにかくウィンドウを出してみる
まずは、.netをIronPythonから使えるようにする。clrというモジュールをインポートするらしい。
import clr
clrでSystem.Windows.Forms / System.Drawing / IronPythonをインポートできるようにし、それからループを始めるっていう一連の処理が書いてある winforms.py をインポートする。
import winforms
.netフレームワークコンポーネントの利用の仕方
clrにコンポーネントを登録する
clr.AddReferenceByPartialName("System.Windows.Forms")
上記登録でインポートが可能になる
from System.Windows.Forms import Form, Button
>>> import clr
>>> import winforms
>>>
>>> clr.AddReferenceByPartialName("System.Windows.Forms")
>>> clr.AddReferenceByPartialName("System.Drawing")
>>>
>>> from System.Drawing import Point
>>> from System.Windows.Forms import Form, Button
>>>
>>> f = Form()
>>> f.Text = 'Simple Window'
>>> f.Show()
>>>
>>> b1 = Button()
>>> b1.Text = 'button1'
>>> b2 = Button()
>>> b2.Text = 'button2'
>>> b3 = Button()
>>> b3.Text = 'button3'
>>>
>>> f.Controls.Add(b1)
>>> f.Controls.Add(b2)
>>> f.Controls.Add(b3)
>>>
>>> b2.Location = Point(b1.Width, 0)
>>> b3.Location = Point(b1.Width + b2.Width, 0)
やりながらボタンが追加されたり移動していったりして面白い。
こんな感じのウィンドウが出る。
クラスにしてイベントを扱ってみる
>>> import clr
>>> import winforms
>>>
>>> clr.AddReferenceByPartialName("System.Windows.Forms")
>>> clr.AddReferenceByPartialName("System.Drawing")
>>>
>>> from System.Drawing import Point
>>> from System.Windows.Forms import Form, Button, MessageBox
>>>
>>> class TestForm(Form):
>>> def __init__(self):
>>> self.Text = 'TestForm'
>>> self.b1 = Button()
>>> self.b1.Text = 'CPython'
>>> self.b2 = Button()
>>> self.b2.Text = 'Django'
>>> self.b3 = Button()
>>> self.b3.Text = 'IronPython'
>>>
>>> self.b1.Location = Point(0,0)
>>> self.b2.Location = Point(self.b1.Width,0)
>>> self.b3.Location = Point(self.b1.Width + self.b2.Width,0)
>>>
>>> self.Controls.Add(self.b1)
>>> self.Controls.Add(self.b2)
>>> self.Controls.Add(self.b3)
>>>
>>>
>>> f = TestForm()
>>>
>>> def button_clicked(sender, event):
>>> MessageBox.Show(sender.Text)
>>>
>>> f.b1.Click += button_clicked
>>> f.b2.Click += button_clicked
>>> f.b3.Click += button_clicked
ボタンをクリックすると、メッセージボックスが表示される。
.. image:: http://art8.photozou.jp/pub/478/1478/photo/3189966.png
:alt: 押されたボタンのテキストが表示される
ボタンをフォームに追加するのを忘れたりしても、f.Controls.Add(f.b1)とかやれば追加できて便利:).
Netフレームワークのコンポーネントを学びたいので、だれか Pro .NET 2.0 Windows Forms and Custom Controls in C# (Expert's Voice in .Net)
を買ってプレゼントしてください(注:アサマシ)。