Как создать IDLE-подобную функциональность для приложения WinForms

StackOverflow https://stackoverflow.com/questions/801432

  •  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, чтобы проверить каждый интервал.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top