IronPython与C#交互<简单小例>

目标:

在WinForm程序中,让IronPython 与C#进行交互。

说明:

本例中在WinForm中嵌入了Ipy脚本,在WinForm执行与输出Ipy脚本运行结果,在WinForm运行时修改窗体属性与控件属性

测试环境:

Window:VS2010+IronPython 2.7

 

过程:

1. C#部分

使用C#语言新建一个WinForm,界面如下

image

代码:

using System;
using System.Windows.Forms;
using IronPython.Hosting;
using System.Drawing;

namespace CSharpAndIpy
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }
        private void btnRunOfString_Click(object sender, EventArgs e)
        {
            try
            {
                //创建一个IpyRunTime,需要2-3秒时间。建议进入全局时加载,此为演示
                var engine = IronPython.Hosting.Python.CreateEngine();
                var code = engine.CreateScriptSourceFromString(txtScript.Text);
                var actual = code.Execute<object>();//执行code脚本,获取输出值actual
                txtPrint.Text = actual.ToString();
            }
            catch (Exception ex)
            {
                txtPrint.Text = ex.ToString();
            }
        }
        //执行事先准备的my.py脚本
        private void btnRunOfIpyFile_Click(object sender, EventArgs e)
        {
            var engine = Python.CreateEngine();
            var scope = engine.CreateScope();
            scope.SetVariable("Ipy_this", this);//将this Set 到Ipy脚本的Ipy_this值中
            var code = engine.CreateScriptSourceFromFile("my.py");//执行my.py
            code.Execute(scope);
        }
        /// <summary>
        /// 测试方法,要为public才能在Ipy脚本中访问
        /// </summary>
        public void testMethod(int R,int G,int B)
        {
            try
            {
                txtScript.BackColor = Color.FromArgb(R, G, B);
            }
            catch { }
        }
    }
}

2:Ipy部分

my.py 脚本(小例就简单3行吧)注:txtPrint控件被我设置为public

Ipy_this.Width = 700
Ipy_this.testMethod(255,0,0)
Ipy_this.txtPrint.Text = 'this.txtPrint控件的Text在Ipy脚本中被修改了'

image当然,手动复制到debug目录也可以

运行结果:

imageimage

image

 

编后感:读过很多来自前辈关于Ipy应用的文章,个人之见,用于不用应该与项目需求息息相关。而用于不用,Ipy就在那里,版本只增不减。以此简单小例,做一个Ipy的应用启发:是否我们可以在config加入Ipy脚本代码,来达到动态设置效果OR写上一个简单的计算器控件OR是否我们可以为WinForm小游戏写一个小游戏脚本...等等

源代码:CSharpAndIpy.rar

posted @ 2011-05-22 22:49  SongSharp  阅读(4553)  评论(0编辑  收藏  举报