当我发现最奇怪的问题时(如果你愿意的话,我正在编写一个小程序,它带有一个列表,并在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
答案 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
来允许数据向上滑动。在后一种情况下,您将丢失向上滚动的信息,而处理异常将允许您在显示屏幕的数据后提示,然后退出或显示更多数据。