Pregunta

Me gustaría añadir " funcionalidad similar a IDLE " a la aplicación C # WinForms, pero no tengo una idea de cómo hacerlo y no pude encontrar nada útil con Google.

Básicamente, quiero una interfaz de línea de comandos interactiva, donde el usuario pueda ingresar un código Python y ejecutarlo (no solo las expresiones, sino que debería ser posible definir nuevas funciones).

Entonces, ¿por dónde empezar? ¿Hay buenos tutoriales o muestras disponibles?

¿Fue útil?

Solución 4

A través de la lista de correo de IronPython encontré IronTextBox2 , que es un buen ejemplo de cómo las cosas estan hechas Necesita un poco de ajuste para que funcione, pero por lo demás es una buena solución.

Otros consejos

Si mi memoria me sirve correctamente, hay un capítulo sobre la incorporación de Python en el libro Python in a Nutshell . Quizás pueda encontrar información útil allí, pero como el libro no es específico de Windows, es posible que deba adaptarlo usted mismo.

Configuraré mi WinForm de esta manera: agregaré 2 cuadros de texto.

1: para salida. Establezca la propiedad multilínea de la primera en verdadero y haga que sea de solo lectura.

2: para la entrada. Utilice el evento KeyUp o KeyPress para, por ejemplo, presione la tecla de retorno y use el texto para hacer lo que desee: agregue el comando para generar el cuadro de texto, inicie el código contra el motor y capture la salida del intérprete

Este enlace ( http: // groups. google.com/group/ironpy/browse_thread/thread/5e61a944c7c94d4b/0cbf29ec0f5fbb64?pli=1 ) puede dar algunas respuestas sobre el lanzamiento de comandos de nuevo en un motor de Python.

IronRuby viene con un intérprete de línea de comandos. ¿No tiene IronPython uno? Si es así, el código fuente sería un buen comienzo :) Ah, y si no es así, asegúrese de mirar al intérprete de IronRuby, porque ambos idiomas están basados ??en el DLR y, por lo tanto, son lo suficientemente similares para aprender de ambos.

Aquí tienes mi solución más genérica:

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;
}

Puede configurar un temporizador que se ejecuta en 60000 intervalos. De esta manera, solo sabrás cuántos minutos el usuario no mueve los ratones. También puede llamar a " isIdle " en el evento Tick para verificar cada intervalo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top