Как создать IDLE-подобную функциональность для приложения WinForms
-
03-07-2019 - |
Вопрос
Я хотел бы добавить «IDLE-подобную функциональность» в приложение C# WinForms, но я не совсем понимаю, как это сделать, и не смог найти ничего полезного в Google.
Итак, в основном мне нужен интерактивный интерфейс командной строки, где пользователь может ввести некоторый код Python и выполнить его (а не только выражения, должна быть возможность определять новые функции).
Итак, с чего начать?Есть ли хорошие учебные пособия или образцы?
Решение 4
Через список рассылки IronPython я нашел Железотекстбокс2, что является хорошим примером того, как все делается.Чтобы запустить его, требуется небольшая настройка, но в остальном это хорошее решение.
Другие советы
Если мне не изменяет память, в книге есть глава о встраивании Python. Коротко о Python.Возможно, вы сможете найти там какую-то полезную информацию, но поскольку книга не предназначена для Windows, возможно, вам придется адаптировать ее самостоятельно.
Я бы настроил свой WinForm следующим образом:добавьте 2 текстовых поля.
1:для вывода.Установите для первого свойства multiline значение true и сделайте его доступным только для чтения.
2:для ввода.Используйте событие KeyUp или KeyPress, например.клавишу возврата и используйте текст, чтобы делать то, что вы хотите:добавить команду в текстовое поле вывода, запустить код в движке и записать вывод интерпретатора
Эта ссылка (http://groups.google.com/group/ironpy/browse_thread/thread/5e61a944c7c94d4b/0cbf29ec0f5fbb64?pli=1) может дать некоторые ответы о запуске команд в движке Python.
IronRuby поставляется с интерпретатором командной строки.Разве у IronPython его тоже нет?Если это так, исходный код будет хорошим началом :) О, и если это не так, обязательно посмотрите на переводчика Ironruby, потому что оба языка основаны на DLR и, следовательно, достаточно похожи, чтобы учиться у обоих.
Вот мое самое общее решение:
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;
}
Вы можете настроить таймер, работающий с интервалом 60000.Таким образом, вы будете точно знать, сколько минут пользователь не двигает мышью.Вы также можете вызвать «isIdle» в самом событии Tick, чтобы проверить каждый интервал.