我正在使用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,我希望它能在所有常见操作系统下运行)
非常感谢大家!
基本上,这是因为使用shutils
的应用程序(在这种情况下)使用Windows控制台api来创建具有固定大小的缓冲区。在更传统的类Unix应用程序中(而不是shutuils
尝试高级和可移植),可以制作一个SIGWINCH
处理程序,通知应用程序的大小更改。使用Windows,您必须从事件循环中获取 - 这被shutils
界面完全遮挡。
它碰巧与Unix“合作”,因为shutils
不必真正关注那些通知。操作系统的终端驱动程序(通常)可以返回更新的信息。
您可以针对shutils
提交错误报告,让其开发人员在设计中考虑到这一点。