【问题标题】:Bug with refresh in python cursespython 诅咒中刷新的错误
【发布时间】:2015-06-16 23:22:36
【问题描述】:

我正在curses 中编写一个程序,有时会发生这样的情况,如果我让程序保持打开状态并使用其他终端选项卡一段时间,当我再次使用该程序时,它似乎已经刷新了一些东西并且有一些东西消失了...我无法显示图片或屏幕截图,因为我还不太了解它何时以及如何发生...有没有办法防止或解决此问题?

【问题讨论】:

  • 没有足够的信息来猜测您所看到的内容。
  • 我知道其实我不知道是否发布这个问题...但我真的不知道为什么会这样...
  • 例如,我使用一个带有许多框的窗口...当这种情况发生时,所有框都消失了,就像刷新了某些东西一样...就像窗口刷新了框..
  • getch/wgetch 刷新它所引用的窗口(在 getch 的情况下为 stdscr)。您可能会看到。
  • 我有一个类似这样的窗口:stackoverflow.com/questions/30828804/… ...但有更多的框...有时,当我切换终端选项卡然后我重新打开脚本运行的选项卡时,该框消失了...我可以通过按一个键来刷新它,因为它会刷新每个按键,但我还有更多的框不会刷新每个按键,所以我不能让它们刷新...我希望你能理解一些东西..

标签: python terminal ncurses curses python-curses


【解决方案1】:

screen.getchstdscr 读取,如果它刷新(由于屏幕上的任何更改),将覆盖boxes。您可以将其更改为 box.getch,就像我在 scroll page by page or line by line using python curses 中所做的那样

getch 的手册页说

如果窗口不是 pad,并且自上次调用 wrefresh 以来它已被移动或修改,则将在读取另一个字符之前调用 wrefresh

在您使用的示例程序中

screen.keypad( 1 )

这仅适用于从标准屏幕读取。如果您从 box 窗口读取,则应在其上设置 keypad 标志:

box.keypad( 1 )

keypad 的手册页说

键盘的默认值为 FALSE

也就是说,它是每个窗口的默认值。

一个有多个窗口的 curses 程序可以选择在不同的时间从不同的窗口读取。每个屏幕只有一个输入缓冲区,但刷新当前窗口的副作用使得管理对窗口的更新更加简单。 (对于复杂的窗口堆叠顺序,您可以使用panel 库而不是依赖这个副作用)。

【讨论】:

  • 我不能使用 box.getch() 因为我已经看到如果我使用它,它会给我带来问题:有时实际上它没有得到正确的字符或类似的东西..
猜你喜欢
  • 2012-01-24
  • 2013-11-22
  • 1970-01-01
  • 2014-04-23
  • 2012-03-28
  • 2012-04-08
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
相关资源
最近更新 更多