【发布时间】:2014-08-11 22:13:34
【问题描述】:
我正在尝试创建一个垫子,其中包含一堆文本,然后看起来会滚动浏览。 但是我只是遇到了分段错误?
import curses,sys
from curses import wrapper
import random,string
def main(stdscr):
pad = curses.newpad(100, 100)
pad_pos = 0
exit = False
a = ''.join(random.choice(string.lowercase) for x in range(5000))
pad.addstr(0,0,str(a))
pad.refresh(pad_pos,0, 0,0, 20,75)
cmd = stdscr.getch()
while not exit:
if cmd == curses.KEY_DOWN:
pad_pos += 1
try:
pad.refresh(pad_pos,0, 0,0, 20,75)
except curses.error:
pass
elif cmd == curses.KEY_UP:
pad_pos -= 1
try:
pad.refresh(pad_pos,0, 0,0, 20,75)
except curses.error:
pass
wrapper(main)
编辑:我在 Centos 6 上的 Python 版本是 2.7.3。我认为这是通过 yum 安装的。
有什么想法吗?
【问题讨论】:
-
你在哪个平台(包括版本)?你有什么 Python 版本,你是如何安装 Python 的? (具体来说,比如“我从 python.org 下载并运行了 3.4.1 64 位 Windows 安装程序”或“我正在使用 Apple 预装的 2.7.5”或“
apt-get install python27给了我 2.7.5 版" 或类似的。) -
另外,我假设
wrapper(main)被绑定到第 1 列,否则这个程序不会做任何事情。那么你剩下的缩进是对的,还是我们必须先猜测才能运行它? -
不用猜这是个错误,我已经更新了问题。
-
我的第一个想法是,一旦你按下一个键,你的程序就会永远在那个循环中旋转,因为你再也不会调用
getch(),而且可能你的平台不喜欢你调用refresh并以尽可能快的速度一遍一遍。 (显然,这将是 libcurses 或 Python 包装器中的错误,但仍然是您不应该触发的错误。) -
嗯。我尝试运行您的代码(在循环内移动
getch调用之后),它对我来说很好。我看到乱码的文字很好,我可以滚动它。我在 Debian 上运行 python 2.7.3。
标签: python curses python-curses