Как встроить графическую интерактивную оболочку IronPython в приложение? - PullRequest
10 голосов
/ 04 марта 2010

Я испробовал очевидный путь в своем любимом проекте с открытым исходным кодом RevitPythonShell (плагин для программного обеспечения для моделирования зданий Autodesk Revit Architecture 2010): code.interact() с механизмом IronPython, настроенным для использования .NET потоки для STDIN и STDOUT. Затем я перенаправляю их на TextBox элемент управления. Это вроде работает, но на самом деле это всего лишь уродливый взлом.

Основная проблема заключается в том, чтобы заставить работать все компоненты оболочки: стрелки вверх и вниз для истории, редактирования, копирования и вставки, EOF, подсветки синтаксиса, подсказок и т. Д. Требуется много работы, чтобы поймите это правильно , и это не та проблема, которую я пытаюсь решить (я пытаюсь получить интерактивную оболочку, размещенную в Revit, а не сделать идеальный графический интерфейс оболочки).

Если бы это был не проект .NET, я бы, вероятно, рассмотрел возможность повторного использования PyCrust / PyWrap , но я не уверен, что это можно сделать из проекта WinForms. Есть что-нибудь подобное для .NET?

Кто-нибудь когда-либо реализовывал интерфейс IConsole и может показать пример того, что мне нужно сделать? Кажется, что это был бы правильный путь (в отличие от использования модуля code), но я не могу с этим разобраться. Исходный код IronPython не имеет никаких комментариев.

ОБНОВЛЕНИЕ: Попробовав кое-что, я в итоге остановился на превосходном IronLab коде. Он включает в себя пример оболочки с подсветкой синтаксиса и все. Код был приятным и легко интегрируемым. Проверьте код RevitPythonShell на подсказки о том, как его встраивать.

Ответы [ 2 ]

7 голосов
/ 21 марта 2012

Я искал похожую вещь и обнаружил, что проект IronLab содержит хорошую консоль IronPython. Исходный код можно найти здесь https://github.com/rwg0/ironlab/tree/master/IronPythonConsole.

[редактировать 25/10/2016] исправлена ​​неработающая ссылка

3 голосов
/ 04 марта 2010

Хорошо, тогда у меня есть два возможных ответа. Один в комментарии выше .... а другой намного проще (без интеллигенции, без подсветки синтаксиса):

http://www.codeproject.com/KB/edit/irontextbox2.aspx

Это от JoeSox, и это для IronPython 2, а не 2.6. Однако мне удалось обновить его для корректной работы с 2.6 примерно за пять минут. Если вам интересно, я могу найти способ отправить вам файл diff или отправить обновленный проект куда-нибудь (он был опубликован под лицензией MIT).

Наслаждайтесь!

David

...