過去の記事で、「IronPython で WindowsForm を書いてもあまり意義を見つけられない」といった事を書いたが、面白いので紹介しておく。
疑問に思ったのが、Form を表示しながら、「対話型プロンプト」で その Form を弄る事はできるのか、だ。
>>> import clr
>>> clr.AddReference("System.Windows.Forms")
>>> from System.Windows.Forms import *
>>> mainForm = Form()
>>> mainForm.Show()
と書いても、mainForm はハングして操作不可能になる。理由は Application.Run() を行っていないからだが、それならば上記のコードは、フォームを表示してスグ消えるのでは?と思ったが、この際それは置いておこう。
>>> import clr
>>> clr.AddReference("System.Windows.Forms")
>>> from System.Windows.Forms import *
>>> mainForm = Form()
>>> Application.Run(mainForm)
と書くと、mainForm はハングしないで通常表示されるが、「対話型プロンプト」の方に処理が帰ってこないので、これ以上の操作が不可能だ。
対話型プロンプトで WindowsForm は無理なのか?もう一つスレッドを起こして云々やろうとしたら、「Tutorial」に「winforms.py」というモジュールがあるのを見つけた。そう、そのモジュールは、別スレッドを起動して、Application.Run() していたのだ。
>>> import winforms
>>> import clr
>>> clr.AddReference("System.Windows.Forms")
>>> from System.Windows.Forms import *
>>> mainForm = Form()
>>> mainForm.Show()
これで無事、フォームを表示できた。続いて以下を書く。
>>> mainForm.Text = "shuujin"
こうすると、今、この瞬間に「表示中(実行中)のフォーム」のタイトルが"shuujin"になるのだ!
どういう仕組みだ?