Python shutil.get_terminal_size()不会更改
我正在使用curses来打印一个非常好的控制台UI,我需要根据终端的大小来确定它。为此,我读到,我可以使用Python shutil.get_terminal_size()不会更改,python,python-3.x,terminal,curses,shutil,Python,Python 3.x,Terminal,Curses,Shutil,我正在使用curses来打印一个非常好的控制台UI,我需要根据终端的大小来确定它。为此,我读到,我可以使用shutil.get\u terminal\u 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) windo
shutil.get\u terminal\u 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\u terminal\u size()
的结果将始终保持不变。(120 30)
你知道它是从哪里来的吗?
(实际上我正在运行Windows,我希望它能在所有通用操作系统下工作)
谢谢大家 基本上,这是因为应用程序(在本例中)使用Windows控制台api来创建具有固定大小的缓冲区。在更传统的类Unix应用程序中(而不是在高级和便携式上尝试使用
shutuils
),可以使用SIGWINCH
处理程序通知应用程序大小的更改。使用Windows时,您必须从事件循环中获取这些信息,而shutils
界面完全掩盖了这一点
它恰好在Unix中“工作”,因为shutils
实际上不必关注这些通知。操作系统的终端驱动程序(通常)可以返回更新的信息
您可以针对shutils
提交一份bug报告,让其开发人员在设计时考虑到这一点