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