Silverlight下面的IronPyton(3)

上一篇我简单的测试了一下与页面上的控件进行交互的例子,包括属性的修改,事件的注册以及事件处理程序的定义,只不过这种方式有个问题,我们要参与的交互对象必须要事件定义好,如果我们能导入dll,在脚本文件中实例化对象,我们将来更大的灵活性,请看下面的测试

  1:首先延续上篇的代码进行测试,直接修改脚本文件,引入dll

 

代码
var temp = @"

import System.Controls
from System.Controls import *


Button1.Content='sssss'
TextBox1.Text='dsfadfaa'
TextBox1.Background =Background
def light(s, e):
s.Foreground = f1

def dark(s, e):
s.Foreground = f2
def click(s,e):
TextBox1.Text='你单击了我哦!'
Button1.MouseEnter += light
Button1.MouseLeave += dark
Button1.Click += click
";

 

 

  执行出错,无法运行!

 

  在网上查了一大堆也没有找到为啥,我们试试把脚本文件放到.py文件中去

      我添加了一个test.py的文件

     

import System.Windows.Controls
import System.Windows.Media
from System.Windows.Controls import *
from System.Windows.Media import *

def f1(s):    
     return 'python f1: ' + s


tt = SolidColorBrush(Colors.Red);
tt1 = SolidColorBrush(Colors.Yellow);
tt2 = SolidColorBrush(Colors.Red);

Button1.Content='sssss'
TextBox1.Text='dsfadfaa'
TextBox1.Background =tt
def light(s, e):
  s.Foreground = tt1

def dark(s, e):
  s.Foreground = tt2
def click(s,e):
  TextBox1.Text='clik me oo!'
Button1.MouseEnter += light
Button1.MouseLeave += dark
Button1.Click += click


.cs代码文件

   

代码
public MainPage()
{
InitializeComponent();

var runtime
= Silverlight.DynamicEngine.CreateRuntime();
var python
= runtime.GetEngine("python");
ScriptScope ss
= python.CreateScope();
ss.SetVariable(
"Button1", this.btn);
ss.SetVariable(
"TextBox1", this.txt);
dynamic script
= python.CreateScriptSourceFromFile("test.py").Execute(ss);
// dynamic script = runtime.UseFile("script.py");


}

 

 

        运行效果如图:

1:

           

 

2:

           

3:

          

 

看看我们做了什么事件,

   我们直接调用了一个.py文件,把控件注册到脚本文件中,

    1:在脚本中引入命名空间

    2:动态实例化一个引入的命名空间下的类

    3:修改控件的属性

    4:可以注册事件以及定义一个事件处理程序

    这些功能可以为我们的页面提供更好的交互性!

posted @ 2010-10-24 19:15  wangxh  阅读(388)  评论(0编辑  收藏  举报