python curses addstr错误 - 但仅限于我的计算机上

时间:2011-03-21 00:58:20

标签: python ncurses curses

当我发现最奇怪的问题时(如果你愿意的话,我正在编写一个小程序,它带有一个列表,并在curses中生成一个菜单(直接,标准库或其他什么,电池包括python的curses))整个程序的评论很多的副本如下)。简单地说,当接受os.listdir生成列表的结果时,使用addstr ERR来诅咒崩溃,但是,如果我将其提供给硬编码列表,则它可以正常工作。当然,这绝对没有意义,对吧?列表是列表是一个列表,列表中的任何其他名称应该仍然是一个列表,对吧?

为了使事情变得更复杂,我将代码发送给我的朋友,他的主要工作在python2.6(我最初编写的是在python3.1中工作)。他取消注释broken_input()调用(为程序提供os.listdir生成的信息),并说它对他来说效果很好。我安装了python 2.6和3.1,所以我更改了我的shebang以使程序在2.6中运行,并且(对于broken_input()取消注释)对我来说,仍然抛出{{1 ERR(用硬编码输入运行良好......当然,顺便说一下,除了概念验证之外完全没用)。

因此,我的问题是:我的python安装中是否存在某些问题(我正在运行Ubuntu lucid,安装了python2.6.5和3.1),如果是这样,我该如何修复它以便我可以获得诅咒正确执行此代码。并且,如果它不是我的python安装,我如何从curses中获得相同的功能(即:从包含任意数量的项目的列表中绘制菜单,对它们进行编号,以便用户可以根据项目编号进行选择)。

addstr

3 个答案:

答案 0 :(得分:5)

你在屏幕上填充太多,因此将越界行号传递给addstr。如果你创建一个空目录来运行程序(或放大终端窗口),它就可以工作。

要解决此问题,请检查main中输出循环前窗口中的行数。

答案 1 :(得分:0)

screen.scrollok(1)之后使用addstr以允许文本滚动。

答案 2 :(得分:0)

问题在addch手册页中解释:

  

addch waddch mvaddch {{1} } 例程将字符ch放入   然后,在当前窗口位置进入给定窗口   高级。它们类似于stdio(3)中的putchar(3)。如果   提前是在合适的边缘:

     
      
  • 光标会自动换行到下一行的开头。

  •   
  • 位于当前滚动区域的底部,如果 mvwaddch 是   启用后,滚动区域向上滚动一行。

  •   
  • 如果未启用 scrollok ,请在右下角写一个字符   保证金成功。但是,会返回错误,因为它不是   可以换行到新行

  •   

给定的程序既没有从右下边距(可能应该说“角落”)中捕获错误,也没有调用 scrollok 来允许数据向上滑动。在后一种情况下,您将丢失向上滚动的信息,而处理异常将允许您在显示屏幕的数据后提示,然后退出或显示更多数据。

相关问题