shutil.get_terminal_size () не меняется - PullRequest
0 голосов
/ 07 октября 2018

Я использую curses для печати довольно приятного интерфейса консоли, и мне нужно, чтобы это зависело от размера терминала.Для этого я прочитал здесь , чтобы я мог использовать shutil.get_terminal_size.Итак, я делаю этот код:

def display(self):
    size_x,size_y = shutil.get_terminal_size()
    print(size_x,size_y)
    window_stat = curses.newwin(size_y,size_x//2-5,0,0)
    window_alert = curses.newwin(size_y,size_x//2-5,0,size_x//2+5)
    window_alert.addstr("\n   " + self.alert2string())
    window_stat.addstr("\n   " + self.stat2string())
    window_alert.box()
    window_stat.box()
    self.stdscr.refresh()
    window_stat.refresh()
    window_alert.refresh()

Но быстрый в том, что он работает отлично при первом вызове функции, но если я использую мышь, чтобы изменить размер терминала и вызвать функциюрезультат shutil.get_terminal_size() всегда останется прежним.(120 30).

Есть ли у вас какие-либо идеи о том, откуда это может прийти?(На самом деле я использую Windows, и мне бы хотелось, чтобы она работала под всеми распространенными ОС)

Большое спасибо всем!

1 Ответ

0 голосов
/ 07 октября 2018

По сути, это потому, что приложение, использующее shutils (в данном случае) использует API консоли Windows для создания буфера , который имеет фиксированный-размер.В более традиционных Unix-подобных приложениях (вместо shutuils попытки на высоком уровне и переносимости) можно создать обработчик SIGWINCH, который уведомляет приложение об изменении размера.В Windows вы должны получить это из цикла обработки событий, который полностью скрыт интерфейсом shutils.

Это происходит, чтобы "работать" с Unix, потому что shutils не нужнона самом деле обратите внимание на эти уведомления.Драйвер терминала операционной системы (обычно) может возвращать обновленную информацию.

Вы можете подать отчет об ошибке на shutils, чтобы его разработчики приняли это во внимание при разработке.

...