最終更新日 2024-09-25

「hmPy・IronPython」の例題⑤ FormやGUIのコンポーネント

概要

普段C#を利用している方は、.NET Frameworkが非クラスで利用できることを失念しているかもしれません。
C#では大抵の場合は、Formクラスを継承した独自のクラスを実装することが多いためです。

Pythonでももちろんそれは可能ですが、Pythonではクラス自体が必須要件ではありませんので、
規模が小さいのであれば、柔らかな後述のような形でコンパクトに済ませる場合も多いでしょう。

非クラスでのフォームの実装

以下のようなファイルをwinform.pyとして作成してみましょう。
文字コードはcp932(sjis)です。

# coding:cp932

import clr
clr.AddReferenceByPartialName("System.Windows.Forms")
clr.AddReferenceByPartialName("System.Drawing")
from System.Windows.Forms import *
from System.Drawing import *

form = Form()
font = Font("MS Gothic", 15)
form.Text = "非クラスでのフォーム"

def form_OnClick(sender, event):
    l = Label(Text = "Hello")
    l.AutoSize = True
    l.Location = event.Location
    l.Font = font
    sender.Controls.Add(l)

form.Click += form_OnClick

Application.Run(form)

呼び出すマクロ

上のファイルを呼び出すマクロを記述し、適当に秀丸に登録して、
実行してみましょう。

#PY = loaddll( hidemarudir + "\\" + "hmPy.dll" );

#_ = dllfuncw(#PY, "DoFile", currentmacrodirectory + "\\winform.py" );

freedll(#PY);