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