在上一篇Post中,我已经对前四个Demo做了简要的介绍,但那四个只是饭前的开胃小菜,好戏还在后头呢。嘿,上菜咯!
         Demo 5 使用WinFX:IronPython的开发从来都紧跟.NET Framework的升级,更重要的,它也十分重视IronPython在未来开发平台上的应用。而这个Demo则向大家展示了它运用WinFX的能力。
         Demo 5.1 使用WinFX提供的语音功能:这个Demo很简单,无非就是使用SpeechSynthesizer而已。但是由于这个Demo制作的时候已经比较早了,其中的一些information并不是最新的,跟着Demo来做,是无法得到正确结果的,需要对代码进行一些修改。代码解析如下:

1. from AvalonStartup import *:这个语句是将AvalonStartup module中的所有内容导入。如果依葫芦画瓢地输入该行代码,将会出现ImportError: No module named AvalonStartup这样的错误信息。实际上,这个module并非是WinFX的library,而是一个IronPython的module。Jim所用的AvalonStartup来自哪里就不得而知了,但是我们可以发现这个module导入了很多基本的WinFX library供后面的Demo使用,而在IronPython的Tutorial目录下有类似作用的IronPython文件:avalon.py。找到了替代品,总算可以松口气了。avalon.py是为后面的Demo做准备的,而要完成这个语音Demo并不需要用到它。我们可以完全忽略这行代码,然后输入如下三行代码即可:
    import sys
    sys.LoadAssemblyByName("System.Speech")
    from System.Speech.Synthesis import *

2. ss = SpeechSynthesizer(): 构造SpeechSynthesizer对象实例;
3. ss.SpeakTextAsync("Hello from IronPython"):开始还以为会跟Demo演示的一样,以单词为单位读出来,结果竟然是一个个字母念了出来!后来想了一下,也许这个语音功能可以识别当前系统的Locale,才会闹出读字母的笑话,于是尝试了一下让它念念中文:ss.SpeakTextAsync("你好")。果然,它把"你好"读出来了!虽然发音有些浑浊,但还是能够听得出说的是"你好",这着实让我激动了好一会。

Demo 5.2 使用WinFX提供的类库构造UI:这部分的Demo并没有什么难度,但是确实比较有趣,因为你可以动态地改变一个Window的大小以及增加新的Control,并且为这些Control增加相应的事件处理方法。需要注意的一点是,之前提到的avalon.py在这里派上用场了。

1. from avalon import *  导入IronPython Tutorial目录下的avalon module(avalon.py),这是能够完成这个Demo的必备条件。当然,如果你有足够的好奇心,也可以打开avalon.py看一下,这个文件到底包含了什么内容。注意,Demo中并没有这行代码,只有类似的from AvalonStartup import *;
2. w = Window()  构建Window对象实例;
3. w.Show()  显示构建的Window实例。当这行代码执行之后,Window窗口将显示出来;
4. w.SizeToContent = SizeToContent.WidthAndHeight 设定Window的大小依据Window包含的内容来改变;
5. b = Button(Content="Click Me") 构造Button实例,同时设定该实例的Content属性为"Click Me";
6. w.Content = b  设定Window实例的Content属性为Button实例b,实际上就是令Window包含Button;
7. b.FontSize = 100  改变Button实例b的FontSize。以上两行代码执行完毕之后,都能马上看到效果,十分快捷;
8. def doit(*args): print args  这里有一个IronPython的特殊语法:随机参数表。*args表示参数列表,也就实说args是一个Tuple(你可以把它看作是ReadOnly的List),它包含了传入该方法的所有实参。详细的内容可以参见我的另外一篇Post:美妙的Python又来了;
9. b.Click += doit  这就是大家都很熟悉的为Click事件增加Event Handler。在这行代码执行之后,点击Click Me的button,就会在控制台将Click事件涉及的参数:EventSender和EventArgs打印出来。

Demo 5.3 装载XAML文件:Windows Presentation Foundation一个有趣的特性是使用了XAML——用于定义UI的XML文件。XAML的出现使得UI的设计变得更加简单且高效,也使得程序员和美工可以更好的协作,进步可谓是革命性的。代码解析如下:

1. calc = LoadXaml('calc.xaml')  装载XAML文件。LoadXaml是定义在avalon.py中的方法,而calc.xaml则存储于IronPython的Tutorial目录下;
2. w.Content = calc  将之前创建的Window实例的Content设为calc——从XAML获得的对象。执行完毕之后,一个漂亮的计算器就呈现在眼前了。注意该Demo是在Demo5.2的基础上进行的,那么w这个Window实例是处于显示状态的,如果你是单独体验这个Demo,别忘了调用w.Show()将Window显示出来;
3. for node in Walk(calc): Print node  将calc对象所包含的子对象节点打印出来。Walk也是定义在avalon.py中的方法。通过一行代码的执行,你可以得到一个有关UI的对象列表;
4. [node for node in Walk(calc) if isinstance(node, Button)] 将calc对象中包含的所有Button对象罗列出来,存到一个临时的List中;
5. buttons = _  这是一个简单的赋值语句,而其中的_则是引用最近的一个临时变量。那么buttons就是一个包含calc中所有Button对象的List了;
6. for b in buttons: print b 这句已经不需要多解释了;
7. for b in buttons: b.Background = Brushes.Blue 改变所有button的背景颜色;
8. for b in buttons: b.LayoutTransform = RotateTransform(90)  改变所有button排列的角度。你会发现所有的button都卧倒了,90表示角度,而这个角度是可以随意设定的,正/负则表示按照顺/逆时针方向旋转;
9. def sayit(b, e): ss.SpeakTextAsync(b.Name) 定义Event Hanlder。同样要注意ss是来自Demo5.1的变量;
10. for b in buttons: b.Click += sayit  为Click事件增加Event Handler。执行完这行代码之后,点击button,会听到相应的读音,可惜的是calc.xaml中把button的name都设为one、equal这样的英文名字,我们听到的又是一个个字母朗读的效果了。

好了,Demo 5就讲解到这里,希望你会喜欢上这些来自IronPython和WinFX有趣的特性。在下一篇Post中,我们将继续关注剩下的两个Demo。

转载于:https://www.cnblogs.com/perhaps/archive/2005/12/28/306198.html

不可错过的MSDN TV —— IronPython: Python on the .NET Framework (中)相关推荐

  1. python调用ironpython_在.NET中嵌入IronPython 交互

    随着IronPyhon 2.0 的发布,.NET Dynamic Language Runtime 也更加成熟了,在2.0中我们可以用动态脚本以粘合剂的方式编写架构体系中的各种逻辑单元,既便于修改,又 ...

  2. 使用Python,OpenCV查找图像中的最亮点

    Python,OpenCV找出图像中的最亮点 1. 原理 2. 优化 3. 效果图 4. 源码 参考 这篇博客将向您展示如何使用Python和OpenCV查找图像中的最亮点,以及应用单行预处理代码-- ...

  3. Python语言在人工智能(AI)中的优势

    本文探讨了Python语言在AI领域的优势与运用. 谁会成为AI 和大数据时代的第一开发语言? 这本已是一个不需要争论的问题.如果说三年前,Matlab.Scala.R.Java 和 Python还各 ...

  4. 使用Python和OpenCV检测图像中的条形码

    使用Python和OpenCV检测图像中的条形码 1. 效果图 2. 算法的步骤 3. 源码 参考 这篇博客将介绍使用计算机视觉和图像处理技术进行条形码检测的必要步骤,并演示使用Python编程语言和 ...

  5. 使用Python,OpenCV从图像中删除轮廓

    使用Python,OpenCV从图像中删除轮廓 1. 效果图 2. 步骤 3. 源码 4. 参考 1. 使用Python.OpenCV计算轮廓的中心并标记 2. 使用Python.OpenCV检测轮廓 ...

  6. 使用Python,OpenCV寻找图像中的轮廓

    使用Python和OpenCV查找图像中的形状 1. 效果图 2. 步骤 3. 源码 参考 这篇博客将讨论使用Python和OpenCV查找图像中的形状,具体是 cv2.inRange在图像中查找形状 ...

  7. 【python】使用python脚本将LFW数据中1672组同一个人多张照片拷贝出来

    使用python脚本将LFW数据中1672组同一个人多张照片拷贝出来 dataCleaning4multiple.py 源码如下: import os, random, shutil import s ...

  8. python使用pandas计算dataframe中每个分组的分位数极差、分组数据的分位数极差(range)、使用groupby函数和agg函数计算分组的两个分位数

    python使用pandas计算dataframe中每个分组的分位数极差.分组数据的分位数极差(range).使用groupby函数和agg函数计算分组的两个分位数 目录

  9. python使用pandas计算dataframe中每个分组的极差、分组数据的极差(range)、使用groupby函数和agg函数计算分组的最大值和最小值

    python使用pandas计算dataframe中每个分组的极差.分组数据的极差(range).使用groupby函数和agg函数计算分组的最大值和最小值 目录

最新文章

  1. 洛谷——P1044 栈
  2. 使下拉框某项不可选的方法
  3. 相同update语句在MySQL,Oracle的不同表现(r12笔记第30天)
  4. ASP.NET 2.0 中的新增服务、控件与功能概述(四)
  5. Net Core下使用RabbitMQ比较完备两种方案(虽然代码有点惨淡,不过我会完善)
  6. android照片编辑软件,照片编辑免费软件下载-照片编辑软件app下载 v7.45最新版_5577安卓网...
  7. node.js 实现udp传输_Node.js实战15:通过udp传输文件。
  8. Zookeeper节点详解
  9. 提高软件测试能力的19条建议
  10. 试问我们都在做些什么类型的测试?
  11. windows L2TP 拨号无法连接
  12. Linux终端登QQ,Linux下登录腾讯QQ的方法
  13. 麦当劳将携手逾100所职业院校提升就业能力;百胜中国一季度开设315家新店 | 美通企业日报
  14. 计算机主板别称是什么城,上海别称什么城?
  15. Unity 粒子特效 之 LogoEffect ParticleSystem 文字图片logo粒子特效
  16. 2008服务器系统+共享文件夹权限设置密码,win2008共享权限设置、server2008文件共享权限设置方法...
  17. 计算机桌面性能3.3,显卡天梯图2018年3月最新版 三月桌面显卡性能排行
  18. qq不能远程桌面连接到服务器,win10系统qq无法远程协助的解决办法
  19. MySQL从删库到跑路(6):子查询
  20. SAP中成本中心实际/计划/差异报表查询实例

热门文章

  1. JDK 11,Tomcat卡在Deploying web application directory
  2. Mysql用户访问工作原理
  3. 使用NAT网关挂载本地物理机
  4. centos7.3二进制安装mariadb10.2.8
  5. Dockerfile最佳实践(二)
  6. 【Java学习笔记之三十一】详解Java8 lambda表达式
  7. 易观的大数据革命 分析师与机器人协同办公
  8. Python第二天(字典)
  9. 自主编写的新书出版2个月,竟然上了51cto读书频道的动态首页,兴奋中!
  10. python 基础 信息量很大很好,适合复习