调整终端大小时Python诅咒窗口闪烁

时间:2020-03-20 10:37:51

标签: python curses python-curses

这是我关于堆栈溢出的第一篇文章,所以我希望我做得正确。

我目前正在使用 python应用程序的终端用户界面。我知道那里有很多现成的库,例如npyscreen,但我想创建一个库作为编程练习。特别是,我想玩一些建筑模式来学习它们。

所有这些,我目前在使用 python curses库时遇到一些问题,因为我正在使用与终端的低层接口。

当我尝试调整终端大小时会出现问题。从代码中可以看到(见下文),我在主循环中处理终端的大小调整,调用curses窗口的getmaxyx()()方法,并相应地重画屏幕上的内容。

问题是,当我尝试调整终端大小时,屏幕似乎闪烁。

此外,我的“ curses应用程序”在MacOS上运行良好,但在Windows上完全崩溃(即使在安装Windows curses之后)。

为解决这个问题,我尝试使用 blessed 库重新编写底层接口。它解决了Windows崩溃问题,但闪烁现象仍然存在。

我不知道是什么问题。

在那些希望帮助我的人之前,请遵循以下项目的 github页面Terminal GUI on GitHub

谢谢。

1 个答案:

答案 0 :(得分:1)

随着诅咒的出现,至少有3件事情要寻找:

  • ncurses可以处理SIGWINCH(可能无法使用PDCurses)

  • 某些Python配置会干扰ncurses接收SIGWINCH。如果您的程序从未收到KEY_RESIZE(它不检查...),那么该是为Python提交错误报告以解决此问题的时候了。

  • 某些程序不会主动读取键盘输入(如果KEY_RESIZE不是 read ,则ncurses不会更新屏幕尺寸。那样会使程序崩溃。