Wypróbowałem oczywistą ścieżkę w moim zwierzęcym projekcie open source RevitPythonShell (wtyczka do oprogramowania do modelowania budynków Autodesk Revit Architecture 2010): code.interact()
z silnikiem IronPython skonfigurowanym do używania strumieni .NET dla STDIN
i STDOUT
. Te następnie przekierowuję do kontrolki TextBox
. To trochę działa, ale tak naprawdę to tylko brzydki hack.Jak osadzić graficzną interaktywną powłokę IronPython w aplikacji?
Głównym problemem jest uzyskanie wszystkich rzeczy powłoki do pracy: Strzałka w górę iw dół strzałek do historii, edycja, kopiowanie & pasty, EOF, podświetlanie składni, podpowiedzi itp To wymaga dużo pracy, aby to prawo, i to nie jest tak naprawdę problem, który próbuję rozwiązać (próbuję uzyskać interaktywną powłokę hostowaną w Revit, a nie zrobić idealny GUI powłoki).
Jeśli to nie był projekt .NET, prawdopodobnie chciałbym ponownie użyć PyCrust/PyWrap, ale nie jestem pewien, czy można to zrobić z projektu WinForms. Czy jest coś podobnego dla .NET?
Czy ktoś kiedykolwiek zaimplementował interfejs IConsole
i może pokazać przykład tego, co powinienem zrobić? Wygląda na to, że jest to właściwa droga do przejścia (w przeciwieństwie do korzystania z modułu code
), ale w moim życiu nie mogę tego rozgryźć. Kod źródłowy IronPython nie ma żadnych komentarzy.
AKTUALIZACJA: Po wypróbowaniu niektórych rzeczy, ostatecznie zdecydowałem się na wspaniały kod IronLab. Zawiera przykładową powłokę z podświetlaniem składni i wszystko. Kod był miły i łatwy do zintegrowania. Sprawdź kod RevitPythonShell w podpowiedzi na temat umieszczania go.
Niezbyt ładne rozwiązanie w puszkach ... więc zostawię to jako komentarz. Możesz zajrzeć do źródła PythonConsole.cs Matta Warda w projekcie IDE SharpDevelop. Zajrzyj do SharpDevelop \ src \ AddIns \ BackendBindings \ Python \ PythonBinding \ Project \ Src. Może to być duży problem z przełamaniem tej klasy, aby można ją było (i ICSharpCode.TextEditor) wykorzystać w innych projektach. Ale może ci to trochę pomoże. Pobierz źródło SharpDevelop z ich serwera budowania: http://build.sharpdevelop.net/BuildArtefacts lub użyj svn na: svn: //svnmirror.sharpdevelop.net/sharpdevelop/branches/3.0/SharpDevelop – djlawler
nie wstydź się;) jest to bardzo dobra odpowiedź - zagłębię się w nią, gdy tylko będę mógł to zrobić! –