最初の簡単なプログラム
それでは、ボタンとフォームの文字を変えるだけの簡単なプログラムから見ていきましょう。
C#のコードの書き方
C#のコードは次のようになります。
using IronPython.Hosting; private void btnSimple_Click(object sender, EventArgs e) { PythonEngine pe = new PythonEngine(); pe.Globals.Add("MyButton", this.btnSimple); pe.ExecuteFile(@".\..\..\1st.py"); }
1行ずつ見ていきましょう。
PythonEngineクラスをインスタンス化する
PythonEngine pe = new PythonEngine();
C#からIronPythonを呼び出すためには、PythonEngineクラスをインスタンス化する必要があります。IronPython.Hosting名前空間に存在するPythonEngineクラスは、IronPythonを実行する本体そのものです。
共有する変数をGlobalsプロパティに登録する
pe.Globals.Add("MyButton", this.btnSimple);
次にIronPython側と共有する変数をPythonEngineクラスのGlobalsプロパティ(IDictionary<string,object>型)に登録します。Globalsプロパティには文字列(IronPython変数)とオブジェクト(C#変数)のペアを登録します。ここではGlobals.Add("MyButton", this.btnSimple)
というように、MyButton
という名前でクリックされたボタンbtnSimple
を登録しています。
ExecuteFileメソッドでPythonスクリプトを実行する
pe.ExecuteFile(@".\..\..\1st.py");
最後に、PythonEngineクラスのExecuteFile
メソッドを呼び出して、Pythonのスクリプトファイルを読み込み、実行しています。ここでは、実行ファイル(exeファイル)の2つ上の階層にある「1st.py」ファイルを読み込んで実行しています(本稿ではVisualStudioからすぐに編集できるように、Pythonスクリプトをこの場所に配置していますが、実際のアプリケーションでは、実行ファイルと同じフォルダかサブフォルダに配置することが多いでしょう)。
Pythonスクリプトの書き方
続いて、Pythonスクリプト「1st.py」の中身を見てみましょう。
# coding: utf-8 #最初の例(MyButtonをGlobalで共有) MyButton.Text = "スクリプトを実行しました" MyButton.Parent.Text = "IronPythonが動きました"
IronPython側のコードはこの4行です。
エンコード名の指定
1行目ではファイルのエンコード形式を指定しています。
# coding: エンコード名
コーディング名としては、「utf-8」のほか「shift-jis」「euc-jp」などが指定できます。IronPythonの内部で管理している文字コードはUnicodeですし、Visual Studioからテキストファイルを作る場合はデフォルトでUtf-8になりますので、最初のうちは# coding: utf-8
と指定しておけば問題ないでしょう。
コメントの記述
Pythonでは、#
の右から行末までは、コメントとみなされます。そのため、2行目はコメントとして扱われます。なお、先ほどの1行目もコメントですが、coding
という文言などを判定して特別にエンコード指定として認識されています。
Globalsプロパティに登録した変数の使用
Pythonでは、左辺の変数に対して、「=
(イコール)記号」を使って右辺に値を代入できます。例えば、x = 1
の場合、x
という変数に数字の1を代入します。
MyButton.Text = "スクリプトを実行しました" MyButton.Parent.Text = "IronPythonが動きました"
ここでは、MyButton
という変数に文字列を代入しています。このMyButton
は、C#のbtnSimple
オブジェクトを表します。C#側でGlobalsプロパティで設定されたオブジェクトは、Pythonスクリプトで自由に参照・変更できます。ここではTextプロパティを変更してボタンの表示を変更しています)。
4行目でも同様に、MyButton
オブジェクトのParentプロパティ(つまりForm1
オブジェクト)のTextプロパティを操作して、フォームのタイトルを変更しています。
最初の例の完成
以上でボタンとフォームの表示を変えるプログラムは完成です。IronPythonで面白いところは、アプリケーションを再起動しなくてもスクリプトの内容を変えればその結果が反映されることです。時間があればぜひスクリプトをいじってみてください。
PythonEngine pe = new PythonEngine(); pe.Sys.DefaultEncoding = Encoding.UTF8; //デフォルトエンコードの変更