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
提交错误报告,让其开发人员在他们的设计中考虑到这一点。
我正在使用 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
提交错误报告,让其开发人员在他们的设计中考虑到这一点。