1

我是 IronPython 新手,需要一些帮助。我有一个在 Visual Basic 2010 Express 中创建的 Windows 窗体,其中包含两个文本框(' txtNumber ' 和' txtResult ')和一个按钮(' btnSquare ')。我想要做的是能够在单击表单上的按钮时调用下面的 Python 脚本(' Square.py ');

class SquarePython:

    def __init__(self, number):

        self.sq = number*number

此脚本应将输入到“ txtNumber ”的数字平方,然后将结果输出到“ txtResult ”。我知道这几乎太简单了,但我只需要知道基础知识。到目前为止,这是我的 VB 代码中的内容;

Imports Microsoft.Scripting.Hosting
Imports IronPython.Hosting
Imports IronPython.Runtime.Types

Public Class Square

    Private Sub btnSquare_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSquare.Click

        Dim runtime As ScriptRuntime = Python.CreateRuntime

        Dim scope As ScriptScope = runtime.ExecuteFile("Square.py")

    End Sub

End Class

提前致谢。

4

1 回答 1

1

如果您不介意,我将在 C# 中给出答案。VB但无论如何它与版本非常相似。对于您的代码访问SquarePython非常简单

ScriptEngine py = Python.CreateEngine();

ScriptScope scope = py.ExecuteFile("Square.py");

dynamic square = scope.GetVariable("SquarePython");

int result = (int)square(5);

Console.WriteLine(result.sq); //prints 25 as you might expected

但是为了简单起见,我会稍微修改一下python代码,像这样

class SquarePython:
    def Square(self, number):
        return number * number

这样您就不必在每次计算时都创建一个对象。下面给出了检索变量和调用 square 方法的代码:

ScriptEngine py = Python.CreateEngine();

ScriptScope scope = py.ExecuteFile("Square.py");
//get variable and then create and object. Could be stored somewhere between computations
dynamic squareInstance = scope.GetVariable("SquarePython")(); 

int result = (int) squareInstance.Square(5);

Console.WriteLine(result);

注意:如果您需要将关键字转换为 VB.NET , 请参阅C#“动态”的 VB.Net 等效项dynamic

于 2013-01-06T13:05:44.340 回答