Come creare funzionalità IDLE per l'applicazione WinForms
-
03-07-2019 - |
Domanda
Vorrei aggiungere " Funzionalità simile a IDLE " all'applicazione WinForms in C #, ma non ho idea di come farlo e non sono riuscito a trovare nulla di utile con Google.
Quindi, in sostanza, voglio un'interfaccia a riga di comando interattiva, in cui l'utente possa inserire del codice Python ed eseguirlo (non solo espressioni, dovrebbe essere possibile definire nuove funzioni).
Quindi, da dove iniziare? Sono disponibili buoni tutorial o esempi?
Soluzione 4
Attraverso la mailing list di IronPython ho trovato IronTextBox2 , che è un buon esempio di come le cose sono fatte. Ha bisogno di un po 'di modifiche, per farlo funzionare, ma per il resto è una buona soluzione.
Altri suggerimenti
Se la mia memoria mi serve correttamente, c'è un capitolo sull'incorporazione di Python nel libro Python in a Nutshell . Forse puoi trovare alcune informazioni utili lì, ma poiché il libro non è specifico di Windows, potresti doverlo adattare da solo.
Vorrei impostare il mio WinForm in questo modo: aggiungere 2 caselle di testo.
1: per output. Impostare la proprietà multilinea della prima su true e renderla di sola lettura.
2: per input. Utilizzare l'evento KeyUp o KeyPress per es. la chiave di ritorno e usa il testo per fare quello che vuoi: aggiungi il comando alla casella di testo di output, avvia il codice sul motore e acquisisci l'output dell'interprete
Questo link ( http: // gruppi. google.com/group/ironpy/browse_thread/thread/5e61a944c7c94d4b/0cbf29ec0f5fbb64?pli=1 ) potrebbe fornire alcune risposte sull'avvio di comandi da un motore Python.
IronRuby viene fornito con un interprete da riga di comando. IronPython non ne ha anche uno? In tal caso, il codice sorgente sarebbe un buon inizio :) Oh, e in caso contrario, assicurati di guardare l'interprete IronRuby, perché entrambe le lingue sono basate sul DLR e sono quindi abbastanza simili da imparare da entrambe.
Ecco la mia soluzione più generica:
Point cursorPoint;
int minutesIdle=0;
private bool isIdle(int minutes)
{
return minutesIdle >= minutes;
}
private void idleTimer_Tick(object sender, EventArgs e)
{
if (Cursor.Position != cursorPoint)
{
// The mouse moved since last check
minutesIdle = 0;
}
else
{
// Mouse still stoped
minutesIdle++;
}
// Save current position
cursorPoint = Cursor.Position;
}
È possibile impostare un timer in esecuzione a intervalli di 60000. In questo modo saprai solo per quanti minuti l'utente non sposta i mouse. Puoi anche chiamare " isIdle " sull'evento Tick per verificare ogni intervallo.