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

2007/05/08 19:55

※ 商品のリンクをクリックして何かを購入すると私に少額の報酬が入ることがあります【広告表示】

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

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)

やりながらボタンが追加されたり移動していったりして面白い。

こんな感じのウィンドウが出る。

IronPythonで初めてのWindows.Form

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

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

を買ってプレゼントしてください(注:アサマシ)。

Prev Entry

Next Entry