2010-03-04 13 views
10

ho provato il percorso evidente nel mio animaletto progetto open source RevitPythonShell (un plugin per la costruzione software di modellazione Autodesk Revit Architecture 2010): code.interact() con il motore di IronPython impostato per l'uso di .NET flussi per STDIN e STDOUT. Questi poi reindirizzare a un controllo . Funziona un po ', ma in realtà è solo un brutto scherzo.Come incorporare una shell grafica IronPython interattiva in un'applicazione?

Il problema principale è ottenere tutto il materiale shell per lavorare: Up-freccia e freccia giù per la storia, la modifica, copia & pasta, EOF, evidenziazione della sintassi, i suggerimenti ecc Ci vuole un sacco di lavoro per arrivare questo diritto, e non è proprio il problema che sto cercando di risolvere (sto cercando di ottenere una shell interattiva ospitata in Revit, non la perfetta GUI della shell).

Se questo non fosse un progetto .NET, probabilmente mi piacerebbe riutilizzare PyCrust/PyWrap, ma non sono sicuro che ciò possa essere fatto da un progetto WinForms. C'è qualcosa di simile per .NET?

Qualcuno ha mai implementato l'interfaccia IConsole e può mostrare un esempio di cosa avrei bisogno di fare? Sembra che questa sarebbe la strada giusta da percorrere (al contrario di usare il modulo code), ma per la vita di me non riesco a capirlo. Il codice sorgente IronPython non ha commenti di sorta.

UPDATE: Dopo aver provato alcune cose, alla fine ho optato per il superbo codice IronLab. Include una shell di esempio con l'evidenziazione della sintassi e tutto. Il codice era bello e facile da integrare. Controlla il codice RevitPythonShell sui suggerimenti su come incorporarlo.

+1

Non proprio una bella soluzione in scatola ... quindi lascio come un commento. Si può guardare il sorgente PythonConsole.cs di Matt Ward nel progetto IDE SharpDevelop. Cerca in SharpDevelop \ src \ AddIns \ BackendBindings \ Python \ PythonBinding \ Project \ Src. Potrebbe essere un grosso problema interrompere questa lezione in modo che (e ICSharpCode.TextEditor) possa essere utilizzato in altri progetti. Ma forse ti aiuterà un po '. Scarica il sorgente SharpDevelop dal loro server di compilazione: http://build.sharpdevelop.net/BuildArtefacts o usa svn a: svn: //svnmirror.sharpdevelop.net/sharpdevelop/branches/3.0/SharpDevelop – djlawler

+0

non essere timido;) questa è un'ottima risposta a sé stante: ne darò un'occhiata non appena avrò l'occasione di farlo! –

risposta

7

ero alla ricerca di una cosa simile e ho scoperto che il progetto IronLab contiene una bella console IronPython. Il codice sorgente può essere trovato qui https://github.com/rwg0/ironlab/tree/master/IronPythonConsole.

[edit on 25/10/2016] url rotto fisso

+0

giusto, in realtà mi sono trasferito a questo circa un anno fa, ma ho dimenticato di aggiornare la mia domanda. grazie per averlo documentato per il resto del mondo. la IronPythonConsole del progetto IronLab è un gioiello! Puoi vedere un esempio di incorporarlo nel tuo progetto nel progetto RevitPythonShell. –

+0

Questo link è morto, sfortunatamente. – canton7

+0

Cambiato l'url. – Samuel

3

Ok, quindi ho due possibili risposte. Uno nel commento di cui sopra .... e un altro molto più semplice (senza intellisense, senza evidenziazione della sintassi):

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

E 'da JoeSox, ed è per IronPython 2, non 2.6. Tuttavia sono stato in grado di aggiornarlo per funzionare correttamente con 2.6 in circa cinque minuti. Se sei interessato, posso trovare un modo per inviarti un file diff o dare uno schiaffo al progetto aggiornato da qualche parte (è stato pubblicato con una licenza MIT).

Divertiti!

David

+0

dolce :) proprio quello che stavo cercando! Riferirò qui quando lo farò funzionare! –

+0

è possibile visualizzare l'origine di RevitPythonShell (http: //revitpythonshell.googlecode.com) per un'idea di come integrare questo controllo IronTextBox2 ... –