2010-03-04 16 views
10

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.

+1

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

+0

nie wstydź się;) jest to bardzo dobra odpowiedź - zagłębię się w nią, gdy tylko będę mógł to zrobić! –

Odpowiedz

7

Szukałem coś podobnego i odkryłem, że projekt IronLab zawiera piękny konsoli IronPython. Kod źródłowy można znaleźć tutaj https://github.com/rwg0/ironlab/tree/master/IronPythonConsole.

[edytuj na 25.10.2016] poprawiony uszkodzony adres URL

+0

prawda, faktycznie przeniosłem się do tego około rok temu, ale zapomniałem zaktualizować moje pytanie. dzięki za udokumentowanie tego dla reszty świata. IronPythonConsole z projektu IronLab to prawdziwy klejnot! Możesz zobaczyć przykład osadzenia go we własnym projekcie w projekcie RevitPythonShell. –

+0

Niestety, ten link nie działa. – canton7

+0

Zmieniono adres URL. – Samuel

3

Dobra, mam dwie możliwe odpowiedzi. Jedno w komentarzu powyżej .... a drugi znacznie prostsze (nie intellisense nie podświetlanie składni):

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

To przez JoeSox, i to jest dla IronPython 2, nie 2.6. Jednak udało mi się go zaktualizować, aby działał poprawnie z 2.6 w około pięć minut. Jeśli jesteś zainteresowany, mogę znaleźć sposób, aby wysłać ci plik diff lub umieścić gdzieś uaktualniony projekt (został opublikowany na licencji MIT).

Ciesz się!

David

+0

słodki :) właśnie tego szukałem! Zgłosić się tutaj, gdy go uruchomię! –

+0

można spojrzeć na źródło RevitPythonShell (http: //revitpythonshell.googlecode.com) dla pomysłu, jak zintegrować to sterowanie IronTextBox2 ... –