У меня проблемы с использованием модуля python curses для Windows. Я использовал колесо, найденное здесь, чтобы получить сценарий, который я написал на своем Mac, для запуска на моем рабочем столе. На данный момент скрипт просто отображает рамку вокруг окна с помощью метода screen.border() и еще одну линию по всей ширине экрана. Я отобразил полосу на экране, используя это:
dimensions = screen.getmaxyx()
screen.addstr(dimensions[0]/2, 0, "-"*dimensions[1])
Я выполнял это в цикле, каждый раз сбрасывая размеры и используя getch для проверки curses.KEY_RRESIZE, а затем запуская screen.erase(), чтобы позволить мне изменить размер окна, и скрипт по-прежнему будет работать. Когда я запустил это в Windows после установки колеса для Python 3.7 (win32, потому что amd64 выдал ошибку), я обнаружил, что screen.getmaxyx() всегда возвращает одно и то же значение: начальный размер экрана и никогда не менялся при изменении размера окна. . Я ценю любую помощь, если кто-нибудь знает способ решить эту проблему, или если я просто не могу использовать проклятия в окнах, альтернативную библиотеку для окон. Спасибо!
Это («в окнах»), вероятно, использует PDCurses, у которого нет возможности автоматически обновлять размер экрана (например, как это делается с обработчиком SIGWINCH
ncurses на основе POSIX). Скорее, он обнаруживает изменение размера окна, и приложение может вызвать is_termresized
, чтобы решить, следует ли указать библиотеке изменить структуры данных для соответствия с использованием resize_term
.
Оболочка python не использует это.
Вызовите resize_term(0, 0) после получения KEY_RESIZE. (Я не уверен в точном отображении Python.)
Спасибо за ответ. Следует отметить, что KEY_RESIZE не работает с окнами, и вы должны определить изменение размера следующим образом: resize = curses.is_term_resized(y, x) if resize: curses.resize_term(0,0) screen.erase()