IronPythonでWindows.Formを使えるようになりたい。

2007年05月08日(火) 19:55 この記事をクリップ!

ちょっと学びたいので、簡単なところをやってみた。


PythonWorkshop the Edgeで荒井さんのプレゼンに感動していらいかな?
荒井さんの出してる IronPythonの世界 が欲しい(注、アサマシ)。


IronPythonのインストール

  1. .net framework SDK2.0をダウンロードしてインストールする。

  2. IronPython1.1をダウンロードして適当なところにおく

  3. Tutorial/winforms.pyを読み込めるような場所におく。
    #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)


やりながらボタンが追加されたり移動していったりして面白い。 こんな感じのウィンドウが出る。
IronPythonで初めてのWindows.Form
IronPythonで初めてのWindows.Form posted by (C)everes



クラスにしてイベントを扱ってみる

>>> 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


ボタンをクリックすると、メッセージボックスが表示される。
押されたボタンのテキストが表示される
押されたボタンのテキストが表示される posted by (C)everes


ボタンをフォームに追加するのを忘れたりしても、f.Controls.Add(f.b1)とかやれば追加できて便利:)

.Netフレームワークのコンポーネントを学びたいので、だれかPro .NET 2.0 Windows Forms and Custom Controls in C# (Expert's Voice in .Net)を買ってプレゼントしてください(注:アサマシ)。


 
ponybadge

Powered by

Feedbacks

Tweets

Tags

Calendar