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:可以注册事件以及定义一个事件处理程序
这些功能可以为我们的页面提供更好的交互性!