形式:用C#写界面和事件触发,调用python脚本进行逻辑和数据处理。

好处:编写好界面和事件触发之后,可以动态改动py脚本,不需要重新编译程序。

缺点:使用的电脑需要装有python,同时程序需附带多个ironpython的dll。

 

方法:

1、安装ironpython

2、新建C#项目。添加引用:IronPython.dll,Microsoft.Dynamic.dll,Microsoft.Scripting.dll

3、在C#文件添加python的调用。

//声明并定义调用python的类

ScriptEngine engine;

ScriptScope scope;

object myInstance;

engine = Python.CreateEngine();

scope = engine.CreateScope();

var code = engine.CreateScriptSourceFromString("XXXXX");//通过string文本调用py语句,也可以调用fromfiles函数来调用py脚本

code.Execute(scope);//执行上述py代码

var myClass = scope.GetVariable<Func<object, object,object>>("Control"); //把py脚本中的类提到C#中,或者是调用py脚本中的类或者变量

myInstance = myClass("hello world", textBox1.Text);//实例化该类,并能调用构造函数进行初始化

//把C#的变量传入到py中

engine.Operations.SetMember(myInstance, "listBox1", listBox1);

engine.Operations.SetMember(myInstance, "treeView1", treeView1);

engine.Operations.SetMember(myInstance, "richTextBox1", richTextBox1);

//调用py脚本中的类成员函数

engine.Operations.GetMember<Func<string, int>>(myInstance, "GetTree")(textBox1.Text);

4、在python文件添加C#类

#引入ironpython库和C#库

#添加python库

import clr,sys

clr.AddReference('IronPython')

clr.AddReference('System.Windows.Forms')

clr.AddReference('System.Drawing')

sys.path.append("C:\Python27\DLLs")

sys.path.append("C:\Python27\Lib")

#把C#的控件类提出来,也可以直接import,但是调用这些空间的时候就要把调用写全,例如 System.Windows.Forms.TreeNode

from System.Windows.Forms import TreeNode

from System.Windows.Forms import ListBox

from System.Windows.Forms import TreeView

from System.Windows.Forms import TextBox

from System.Windows.Forms import RichTextBox

from System.Drawing import Color

把C#空间类实例化

listBox1 = ListBox()