gpt4 book ai didi

python - shutil.get_terminal_size() 不变

转载 作者:行者123 更新时间:2023-11-28 17:03:36 28 4
gpt4 key购买 nike

我正在使用 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 接口(interface)完全遮盖了。

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

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

关于python - shutil.get_terminal_size() 不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52686458/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com