Como criar funcionalidade -como IDLE para aplicação WinForms
-
03-07-2019 - |
Pergunta
Eu gostaria de acrescentar "IDLE-como funcionalidade" para aplicação C # WinForms, mas não consegue ter uma idéia de como fazer isso e não consegui encontrar nada de útil com o Google.
Então, basicamente, eu quero interface de linha de comando interativa, onde o usuário pode digitar um código Python e executá-la (não apenas expressões, deve ser possível definir novas funções).
Então, por onde começar? Existem bons tutoriais ou amostras disponíveis?
Solução 4
Thru lista de discussão IronPython Eu encontrei IronTextBox2 , que é bom exemplo de como as coisas são feitas. Ele precisa de um pouco de ajustes, para obtê-lo correr, mas por outro lado é boa solução.
Outras dicas
Se a memória não me falha, há um capítulo sobre a incorporação de Python no livro Python in a Nutshell . Talvez você possa encontrar alguma informação útil lá, mas desde que o livro não é específico do Windows, você pode ter que adaptá-lo a si mesmo.
Eu setyp meu WinForm como este:. Adicionar 2 caixas de texto
1: para a saída. Defina a propriedade de várias linhas dos primeiros a verdade, e torná-lo somente leitura.
2: para entrada. Use KeyUp Ou KeyPress Evento de exemplo a tecla de retorno e utilizar o texto para fazer o que quiser: comando add a caixa de texto de saída, código de lançamento contra o motor e captura de saída do intérprete
Esta ligação ( http: // grupos. google.com/group/ironpy/browse_thread/thread/5e61a944c7c94d4b/0cbf29ec0f5fbb64?pli=1 ) pode dar algumas respostas sobre o lançamento de comandos agains um motor de python.
IronRuby vem com um interpretador de linha de comando. Não IronPython também tem um? Se assim for, o código-fonte seria um bom começo :) Ah, e se isso não acontecer, não se esqueça de olhar para o intérprete IronRuby, porque ambas as línguas são baseados no DLR e são suficientes, portanto, semelhante a aprender com ambos.
Aqui vai a minha solução mais 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;
}
Você pode configurar um temporizador em execução em 60000 intervalo. Desta forma você só vai saber quantos minutos o usuário não se movem os ratos. Você também pode chamar "isIdle" no próprio evento Tick para verificar em cada intervalo.