Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python shutil.get_terminal_size()不会更改_Python_Python 3.x_Terminal_Curses_Shutil - Fatal编程技术网

Python shutil.get_terminal_size()不会更改

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

我正在使用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)
    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报告,让其开发人员在设计时考虑到这一点