创建代码编辑器。

已加入
2019年12月11日
留言内容
13
编程经验
1-3
你好,

我想创建自己的代码编辑器模块,例如Windows窗体或WPF。关于这个想法的一些背景知识,如果有人曾经使用过NI Teststand软件,则可以在其中创建序列文件(.seq),这是一种自定义脚本文件,只能在NI teststand中打开。仅供参考,NI Teststand主要用于工厂自动化相关的工作中。(不仅用于此目的,而且用于各种应用程序。)因此,在创建序列时,可以拖放不同的功能(例如,子序列,if-else,for循环,消息弹出功能等)。在那里被称为"steps"。对于每个步骤,您可以添加自定义逻辑,设置变量并调用不同的编译器模块,这些模块将执行该步骤并生成结果。

好吧,所以我想设计一个类似的"Script editor"c#中的引擎/模块,我想使用IronPython,每当我拖动n个拖放的GUI元素(如按钮,步骤类型为n个)时,它都会自动创建一个脚本文件(.py)。由于用户将在运行时设计脚本,因此,我需要解释器以在运行时检查语法和其他内容,这就是为什么我想使用IronPython的原因。我在网络上阅读了许多与此相关的文档,但不知道确切如何处理?我很好奇知道绑定如何工作,Windows窗体如何工作..就像添加控件时一样,它会自动将其功能链接到设计器或代码文件。那么这是如何工作的呢?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,536
地点
弗吉尼亚州切萨皮克
编程经验
10+
我认为您是在混淆"binding"在WPF和WinForms上下文中生成代码。在WPF和WinForms中,绑定意味着将应用程序数据模型的当前状态公开(和/或隧穿)到UI。我对您使用的理解"binding"正在将用户在用户界面上添加的每个块映射到关联的生成的IronPython代码中。是的,它们是相似的思想和概念,但是处于不同的抽象级别。 WPF / WinForms绑定在数据级别关闭,而您的绑定在模块/代码逻辑级别打开。

另外,我不确定您是否使用该术语"binding"用于确定块的位置"attaches"本身到一个或多个其他块。例如。当您将动作块拖动到“如果分支”块的顶部时,该动作块将自己放置为“如果分支”块的子代。

无论哪种方式,您都必须编写自定义代码来检测UI中何时发生更改,并以某种方式将其映射回IronPython模块。我强烈建议您查看《红龙》一书中的表情树。您的UI基本上是在操作表达式树:添加/删除节点,更改节点类型等。从那里只需要从表达式树生成代码即可:与输出为汇编或p代码的常规编译器不同,您的代码将生成IronPython。

当您对此进行第一次尝试时,我建议始终将以前生成的代码吹散并从头开始重新生成。像尝试双击要添加事件处理程序的Visual Studio一样,仅动态更新现有文件中的几行内容将非常容易。首先关注于获得最低可行产品(MVP),在该产品中,用户可以在GUI中创建和编辑一系列步骤,然后进行编译,最后获得运行IronPython代码。在成功的迭代中,缓慢地朝着能够执行VS的方向努力。
 
已加入
2019年12月11日
留言内容
13
编程经验
1-3
感谢您的指导。好吧,通过一些研究,我找到了一个将从交互式GUI生成python文件的工具。这似乎解决了脚本编辑器部分。我对铁蟒蛇进行了研究。 ironpython2源代码 当试图在Visual Studio中加载此c鲜明项目时,它没有以错误的方式加载。需要帮助。我正在考虑使用ironpython作为后端引擎来执行python脚本。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,536
地点
弗吉尼亚州切萨皮克
编程经验
10+
如果您更详细地告诉我们,那将会有所帮助"它没有以错误的方式加载"曾是。是否看到错误消息?那是什么呢?
 
已加入
2019年12月11日
留言内容
13
编程经验
1-3
如果您更详细地告诉我们,那将会有所帮助"它没有以错误的方式加载"曾是。是否看到错误消息?那是什么呢?
这是所附的屏幕截图。似乎配置文件IronPython.sln存在问题。这是Ironpython的完整源代码,可以在Visual Studio中正确加载。
 

附件

  • IronPython_Unloaded2.PNG
    IronPython_Unloaded2.PNG
    45.7 KB · Views: 11
  • IronPython1.PNG
    IronPython1.PNG
    55.6 KB · Views: 10
最佳 底部