4

这似乎只是一个我无法弄清楚的简单错误。我在 C# WPF 应用程序中使用 IronPython,尝试从自定义 C# 类运行函数时出现以下错误:AttributeError: 'MyScriptingFunctions' object has no attribute 'Procedure' .

我正在运行的 python 脚本非常简单,只有两行。第 1 行执行正常,错误发生在第 2 行。

    txt.Text = "some text"
    MyFunc.Procedure(5)

MyScriptingFunctions.cs:

class MyScriptingFunctions
{
    public MyScriptingFunctions() {}

    public void Procedure(int num)
    {
        Console.WriteLine("Executing procedure " + num); 
    }
}

这是我设置 IronPython 引擎的方法:

     private void btnRunScript_Click(object sender, RoutedEventArgs e)
     {
        MyScriptingFunctions scriptFuncs = new MyScriptingFunctions();
        ScriptEngine engine = Python.CreateEngine();
        ScriptScope scope = engine.CreateScope();

        ScriptRuntime runtime = engine.Runtime;
        runtime.LoadAssembly(typeof(String).Assembly);
        runtime.LoadAssembly(typeof(Uri).Assembly);

        //Set Variable for the python script to use
        scope.SetVariable("txt", fullReadResultsTextBox);
        scope.SetVariable("MyFunc", scriptFuncs);
        string code = this.scriptTextBox.Text;
        try
        {
            ScriptSource source = engine.CreateScriptSourceFromString(code, SourceCodeKind.Statements);
            source.Execute(scope);
        }
        catch (Exception ex)
        {
            ExceptionOperations eo;
            eo = engine.GetService<ExceptionOperations>();
            string error = eo.FormatException(ex);

            MessageBox.Show(error, "There was an Error");
            return;
        }

    }

我只是设置两个变量:txt类型System.Windows.Controls.TextBoxMyFunc一个是我的自定义类的对象MyScriptingFunctions

我在做什么错,为什么 python 脚本正确执行 TextBox 方法而不是我的自定义类的方法?

4

1 回答 1

7

我能看到的唯一想法可能是一个问题,或者只是一个复制粘贴错误,那就是MyScriptingFunctionsin not public。这不应该是一个问题,因为您正在传递一个实例,而不是尝试导入类,但值得一试。否则一切看起来都很好。

于 2013-06-19T21:45:47.307 回答