WPF使用IronPython库的简单Demo

一、IronPython和C#交互

IronPython是一个.NET平台上的Python实现,包括了完整的编译器、执行引擎与运行时支持,能够与.NET已有的库无缝整合到一起。

IronPython已经很好的集成到了.NET framework中,所以Ironpython和C#的交互也就变得很简单了。下面就通过一些简单的例子来看看IronPython和C#之间的交互。

二、PTVS(Python tools for Visual Studio)

是一个免费开源的VisualStudio的插件,支持 VisualStudio 2010/2012/2013,安装好这个插件之后,我们就可以直接通过VS进行IronPython的开发了。可以使用其提供的IronPython WPF模板直接生成WPF的IronPython项目,这个示例在 https://blog.csdn.net/sinat_27382047/article/details/79938003 里有详细的介绍,但是由于我使用这个项目模板做WPF开发时,总是存在一些这样那样的问题,并且该模板对于应用比较复杂的WPF项目来说不是那么的友好,并且不太好支持MVVM模式,所以我采用的是直接在传统的WPF项目中使用IronPython库实现调用Python脚本的方法,下面的例子2,是使用的一个Demo。

三、WPF with IronPython

1、使用VS2019创建WPF项目

引用IronPython相关库,IronPython库可以直接在GitHub上下载

2、编辑Xaml文件

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:local="clr-namespace:ScriptEditor"

mc:Ignorable="d"

Title="Calculator" Height="450" Width="300" ResizeMode="CanMinimize">

3、编辑Xmal后台文件

(在这个demo里没有使用MVVM模式),所以直接在后台写逻辑

using IronPython.Hosting;

using Microsoft.Scripting.Hosting;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

namespace ScriptEditor

{

///

/// MainWindow.xaml 的交互逻辑

///

public partial class MainWindow : Window

{

ScriptRuntime pyRunTime;

dynamic obj;

public MainWindow()

{

InitializeComponent();

}

private void Input_Button_Click(object sender, RoutedEventArgs e)

{

Button button = sender as Button;

this.InputTb.Text += button.Content;

}

private void Clear_Button_Click(object sender, RoutedEventArgs e)

{

this.InputTb.Text = "";

this.ResultTb.Text = "";

}

private void Calc_Button_Click(object sender, RoutedEventArgs e)

{

try

{

if (obj==null)

{

//创建Python运行时

pyRunTime = Python.CreateRuntime();

//创建动态对象

obj = pyRunTime.UseFile(@"Script/Calculation.py");

}

//调用Python函数方法

this.ResultTb.Text = obj.Calc_Button_Click(this.InputTb.Text);

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

}

}

}

4、编辑Python脚本

因为Python拥有许多强大的库,以及它的灵活的特点,在做一些小型的项目开发可以利用他的轻便性,对于一些大型项目需要也可以使用它进行灵活的配置

def Calc_Button_Click(expression):

try:

result = eval(expression)

return str(result)

except Exception, e:

tracelog = traceback.format_exc()

pass

5、运行结果

以上就是一个非常简单的例子了,因为使用了动态Dynamic对象,实际上的性能(响应速度偏慢)不好,但如果只是需要用到它做一个扩展功能,还是很方便的

IronPython还有许多其他方面的问题,比如目前不支持Python3.X,当Python内Import了一些其他的库的时候会报找不到模块的错误,这个解决办法在:https://www.cnblogs.com/monkeyfx/p/6522000.html 中有详细的解决方案,各位可以参考

python wpf教程_WPF使用IronPython库的简单Demo相关推荐

  1. 分隔符有哪些_Python有哪些常用的标准库?Python基础教程,常用标准库(一)

    上一节课我们学习了如何自定义模块,大家可以定义自己的模块,但是项目中通常不允许我们自己造轮子,所以本节课主要学习Python的标准库,学习使用别人的轮子,由于标准库内容较多,所以我们分开两次课程来学习 ...

  2. python基础教程: 利用turtle库绘制笑脸和哭脸的例子

    今天小编就为大家分享一篇python 利用turtle库绘制笑脸和哭脸的例子,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 我就废话不多说了,直接上代码吧! import turtl ...

  3. python基础教程:通过Turtle库在Python中绘制一个鼠年福鼠

    这篇文章主要介绍了通过Turtle库在Python中绘制一个鼠年福鼠,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 turtle库是一个很经典的绘图库,其最初来自 ...

  4. python数据库教程_Python连接mysql数据库及简单增删改查操作示例代码

    1.安装pymysql 进入cmd,输入 pip install pymysql: 2.数据库建表 在数据库中,建立一个简单的表,如图: 3.简单操作 3.1查询操作 #coding=utf-8 #连 ...

  5. Python学习教程:教你用Python通过微信来控制电脑摄像头

    如果说强大的标准库奠定了Python发展的基石,丰富的第三方库则是python不断发展的保证.今天的Python学习教程就来通过itchart库来实现通过微信对电脑的一些操作. 1.安装库 安装itc ...

  6. python itchat教程_Python学习教程:教你用Python通过微信来控制电脑摄像头

    原标题:Python学习教程:教你用Python通过微信来控制电脑摄像头 如果说强大的标准库奠定了Python发展的基石,丰富的第三方库则是python不断发展的保证.今天的Python学习教程就来通 ...

  7. Python基础教程:一次性搞定 Django Form

    最近在项目上用到了 Django 的自带的 Form 表单,遇到了一些坑,今天给大家出的这篇Python基础教程也是做了一个简单的总结,大家可以对号出坑. Form 基础介绍 首先让我们先来了解下 D ...

  8. Python培训教程分享:“高效实用” 的Python工具库

    作为一名合格Python技术员,对于Python工具库的使用是少不了的,本期Python培训教程就为大家分享的是""高效实用" 的Python工具库",希望能够 ...

  9. Python学习教程(Python学习路线):如何正确使用Pandas库提升项目的运行速度?...

    Python学习教程:如何正确使用Pandas库提升项目的运行速度? 如果你从事大数据工作,用Python的Pandas库时会发现很多惊喜.Pandas在数据科学和分析领域扮演越来越重要的角色,尤其是 ...

最新文章

  1. 安装GCC-8.3.0及其依赖
  2. JavaScript开发
  3. map()和zip()操作
  4. Docker创建私有仓库 | 数据卷和数据卷容器 | 容器互联 操作详解
  5. 文本二叉树折半查询及其截取值
  6. 启动spark shell
  7. C#LeetCode刷题之#788-旋转数字(Rotated Digits)
  8. c语言提取七位数讲解,输入一个七位数将这个数的奇位数重新组合成新的四位数并输出的编程怎么写    在线等急...
  9. java栈的底层实现_JVM 底层原理总结
  10. CDH6.2.1安装Kafka出现的问题
  11. Atitit web httphandler的实现 java python node.js c# net php 目录 1.1. Java 过滤器 servelet 1 1.2. Python的
  12. 基于VRML的虚拟校园漫游系统
  13. 走进波分 -- 14.OSN902产品介绍
  14. 大学计算机基础:信息处理技术实验教程,大学计算机基础实验教程
  15. 财务会计 -- 什么是借贷
  16. ARCMAP里面关于地理投影方面的知识
  17. js 字符串转二维数组
  18. 高等数学阶段复习, 函数极限, 连续, 导数,微分
  19. mysql错误+126_MySQL,错误126:表的密钥文件不正确
  20. 2020-12-02 微信JSAPIV3支付

热门文章

  1. 什么是 SAP UI5 的 Element binding
  2. SAP 电商云 Spartacus UI Component 级别的延迟加载实现(Lazy Load)
  3. orbeon form 的日志处理
  4. SAP Spartacus 4.0 源代码模式下开启 SSR,为什么会从本地去加载 all.css?
  5. Angular jasmine如何从detectChange触发refreshView进而执行到Component的hook实现
  6. 如何自行查询SAP Spartacus Organization Unit List的取数逻辑
  7. SAP Spartacus里cx-carousel的实现
  8. Microsoft Azure里创建Enterprise Applications
  9. Java和ABAP里的外部类和内部类
  10. react native命令行全局安装