【问题标题】:shutil.get_terminal_size() does not changeshutil.get_terminal_size() 没有改变
【发布时间】:2019-03-12 04:35:44
【问题描述】:

我正在使用 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,我希望它能够在所有常见的操作系统下工作)

非常感谢大家!

【问题讨论】:

    标签: python python-3.x terminal curses shutil


    【解决方案1】:

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

    它恰好在 Unix 上“工作”,因为 shutils 不必真正关注这些通知。操作系统的终端驱动程序(通常)可以返回更新的信息。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      相关资源
      最近更新 更多