shutil.get_terminal_size()不会改变

问题描述 投票:3回答:1

我正在使用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个回答
2
投票

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

它碰巧与Unix“合作”,因为shutils不必真正关注那些通知。操作系统的终端驱动程序(通常)可以返回更新的信息。

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

© www.soinside.com 2019 - 2024. All rights reserved.