shutil.get_terminal_size() 不变

shutil.get_terminal_size() does not change

我正在使用 curses 来打印一个非常漂亮的控制台 UI,我需要一些依赖于终端大小的东西。为此,我阅读了 here,我可以使用 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,我希望它能在所有常见的 OS 下工作)

非常感谢大家!

基本上,那是因为使用 shutils 的应用程序(在这种情况下)使用 Windows 控制台 api 创建一个 缓冲区 它有一个固定的大小。在更传统的类 Unix 应用程序中(而不是 shutuils 尝试高级和可移植),人们会制作一个 SIGWINCH 处理程序来通知应用程序大小更改。使用 Windows,您必须从事件循环中获取它——它被 shutils 接口完全遮盖了。

在 Unix 中 "work" 恰好发生这种情况,因为 shutils 不必真正关注这些通知。操作系统的终端驱动程序(通常)可以return更新信息。

您可以针对 shutils 提交错误报告,让其开发人员在他们的设计中考虑到这一点。