Ncurses、Python和OSX Lion

6
我是一个新手护士,正在尝试在我的OSX Lion上使用一些python代码。我遇到了一个奇怪的bug,但我不知道我做错了什么。我已经进行了广泛的谷歌搜索,甚至在linux中也找不到类似的问题。我也有选择地删除一些行来查看它们中的哪一个是问题。当我运行下面的代码时,我什么也得不到。没有菜单,而且我的终端程序出现了问题,如果我按回车键,你会看到下面图片中显示的内容。我必须输入 reset 才能让它正常工作。有人可以给我建议或指点我应该往哪个方向寻找解决方法吗?我真的非常感激。谢谢。
脚本:
import curses

screen = curses.initscr()   # Init curses
curses.noecho()             # Suppress key output to screen
curses.curs_set(0)          # remove cursor from screen
screen.keypad(1)            # set mode when capturing keypresses

top_pos = 12
left_pos = 12
screen.addstr(top_pos, left_pos, "This is a String")

结果:

截图

顺便说一下,我正在使用Lion中默认的python和库,没有使用macports。如果可能的话,我想使用本地库。


你的程序正在退出,因为在打印“这是一个字符串”之后,你没有告诉它要做什么。你期望在这里发生什么? - user149341
在退出脚本之前,您必须记得调用 curses.endwin,因为它会恢复终端设置。 - Some programmer dude
1个回答

6

你有两个问题。

使用addstr将字符串添加到屏幕后,你没有告诉它刷新屏幕。在调用addstr之后添加以下内容:

screen.refresh()

你需要在程序结束时调用endwin()函数来重置终端。将以下代码添加到程序结尾即可:
```c++ endwin(); ```
curses.endwin()

说了这些之后,在您进行这两个更改后运行程序,它会似乎什么都没有发生,因为在将字符串显示在屏幕上后,curses退出并将屏幕返回到您运行程序之前的状态。
在调用endwin()之前添加以下内容:
screen.getch()

然后程序将等待您按下一个键才退出。

这太完美了。谢谢你。我没意识到我需要刷新 并且 等待输入,这样它才不会消失。非常感谢你。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接