Python мерцает окно проклятий при изменении размера терминала - PullRequest
0 голосов
/ 20 марта 2020

Это мой первый пост о переполнении стека, поэтому я надеюсь, что делаю это правильно.

В настоящее время я работаю над пользовательским интерфейсом терминала для python приложений . Я знаю, что есть много готовых к использованию библиотек, таких как npyscreen, но я хочу создать одну из них в качестве примера программирования. В частности, я хотел поиграть с некоторыми архитектурными паттернами, чтобы изучить их.

Все это говорит, что в настоящее время я сталкиваюсь с несколькими проблемами с python библиотек проклятий , которые я используя низкоуровневый интерфейс к терминалу.

Проблемы возникают, когда я пытаюсь изменить размер моего терминала. Как видно из кода (см. Ниже), я обрабатываю изменение размера терминала в основном l oop, , вызывая метод getmaxyx () () моего окна curses и перерисовывая то, что на экране соответственно.

Проблема в том, что при попытке изменить размер терминала экран мерцает.

Более того, мое "приложение проклятий" отлично работает на MacOS, но полностью вылетает на windows (даже после установки windows curses).

Чтобы справиться с этим, я попытался переписать низкоуровневый интерфейс с помощью библиотеки blessed . Это решило windows проблему сбоя , но мерцание все еще остается.

Я не могу понять, в чем проблема.

Для тех, кто хочет мне помочь, здесь следует страница github проекта: Терминал GUI на GitHub

Заранее спасибо.

1 Ответ

0 голосов
/ 20 марта 2020

С curses , есть (по крайней мере) 3 вещи, которые нужно искать:

  • ncurses может обрабатывать SIGWINCH (PDCurses не может)

  • некоторые конфигурации Python мешают ncurses-получателям SIGWINCH. Если ваша программа никогда не получает KEY_RESIZE (что она не проверяет ...), то пришло время подать отчет об ошибке для Python, чтобы исправить это.

  • некоторые программы не активно читать ввод с клавиатуры (и если KEY_RESIZE не read , ncurses не будет обновлять размер экрана. Это сделает программу cra sh.

...