Python诅咒显示分段错误

Python诅咒显示分段错误,python,curses,python-curses,Python,Curses,Python Curses,我试图创建一个便笺簿,里面有一堆文本,我会在上面滚动浏览。 但是我只是得到了一个分割错误 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

我试图创建一个便笺簿,里面有一堆文本,我会在上面滚动浏览。 但是我只是得到了一个分割错误

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)
编辑:我的Python版本是Centos 6上的2.7.3。我想这是通过yum安装的

有什么想法吗?

试试这个:

from __future__ import division  #You don't need this in Python3
import curses
from math import *



screen = curses.initscr()
curses.noecho()
curses.cbreak()
curses.start_color()
screen.keypad(1)
curses.init_pair(1,curses.COLOR_BLACK, curses.COLOR_CYAN)
highlightText = curses.color_pair(1)
normalText = curses.A_NORMAL
screen.border(0)
curses.curs_set(0)
box = curses.newwin(12,64,1,1)
box.box()


strings = ["a","b","c","d","e","f","g","h","i","l","m","n"]
row_num = len(strings)
max_row = 10
pages = int(ceil(row_num/max_row))
position = 1
page = 1
for i in range(1,max_row + 1):
    if row_num == 0:
        box.addstr(1,1,"There aren't strings", highlightText)
    else:
        if (i == position):
            box.addstr(i,2,strings[i-1], highlightText)
        else:
            box.addstr(i,2,strings[i-1],normalText)
        if i == row_num:
            break

screen.refresh()


box.refresh()

x = screen.getch()
while x != 27:
    if (x == curses.KEY_DOWN):
        if page == 1:
            if position < i:
                position = position + 1
            else:
                if pages > 1:
                    page = page +1
                    position = 1 + (max_row * (page - 1))
        elif page == pages:
            if position < row_num:
                position = position + 1
        else:
            if position < max_row+(max_row*(page-1)):
                position = position + 1
            else:
                page = page + 1
                position = 1 + (max_row * (page - 1))
    if (x == curses.KEY_UP):
        if page == 1:
            if position > 1:
                position = position - 1
        else:
            if position > (1 + (max_row*(page-1))):
                position = position - 1
            else:
                page = page - 1
                position = max_row + (max_row * (page - 1))
    if (x == curses.KEY_LEFT):
        if page > 1:
            page = page - 1
            position = 1 + (max_row * (page - 1))

    if (x == curses.KEY_RIGHT):
        if page < pages:
            page = page + 1
            position = (1 + (max_row * (page - 1)))


    box.erase()
    screen.border(0)
    box.border(0)

    for i in range(1+(max_row*(page-1)),max_row+1+(max_row*(page-1))):
        if row_num == 0:
            box.addstr(1,1,"There aren't strings", highlightText)
        else:

            if (i+(max_row*(page-1)) == position+(max_row*(page-1))):
                box.addstr(i-(max_row*(page-1)),2,strings[i-1], highlightText)
            else:

                box.addstr(i-(max_row*(page-1)),2,strings[i-1],normalText)
            if i == row_num:
                break



    screen.refresh()
    box.refresh()
    x = screen.getch()

curses.endwin()
exit()
来自uuu未来uuuu导入部门#在Python3中不需要这个
进口诅咒
从数学导入*
screen=curses.initscr()
诅咒
诅咒
诅咒。开始使用颜色()
屏幕。键盘(1)
curses.init_对(1,curses.COLOR_黑色,curses.COLOR_青色)
highlightText=curses.color\u对(1)
normalText=诅咒。A_正常
屏幕边框(0)
诅咒。诅咒集(0)
box=诅咒。newwin(12,64,1,1)
box.box()
字符串=[“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”、“l”、“m”、“n”]
行数=len(字符串)
最大行数=10
pages=int(ceil(行数/最大行))
位置=1
页码=1
对于范围内的i(1,最大行+1):
如果行数=0:
addstr(1,1,“没有字符串”,highlightText)
其他:
如果(i==位置):
box.addstr(i,2,strings[i-1],highlightText)
其他:
box.addstr(i,2,字符串[i-1],normalText)
如果i==行数:
打破
screen.refresh()
box.refresh()
x=screen.getch()
而x!=27:
如果(x==curses.KEY_DOWN):
如果页面==1:
如果位置1:
第页=第+1页
位置=1+(最大行*(第1页))
elif页面==页面:
如果位置<行数:
位置=位置+1
其他:
如果位置<最大行+(最大行*(第1页)):
位置=位置+1
其他:
第页=第+1页
位置=1+(最大行*(第1页))
如果(x==curses.KEY\u UP):
如果页面==1:
如果位置>1:
位置=位置-1
其他:
如果位置>(1+(最大行*(第1页)):
位置=位置-1
其他:
第页=第1页
位置=最大行+(最大行*(第1页))
如果(x==curses.KEY_LEFT):
如果页面>1:
第页=第1页
位置=1+(最大行*(第1页))
如果(x==curses.KEY\u RIGHT):
如果第页<第页:
第页=第+1页
位置=(1+(最大行*(第1页)))
box.erase()
屏幕边框(0)
框。边框(0)
对于范围(1+(最大行*(第1页))中的i,最大行+1+(最大行*(第1页)):
如果行数=0:
addstr(1,1,“没有字符串”,highlightText)
其他:
如果(i+(最大行*(第1页))=位置+(最大行*(第1页)):
box.addstr(i-(最大行*(第1页)),2,字符串[i-1],高亮文本)
其他:
box.addstr(i-(最大行*(第1页)),2,字符串[i-1],普通文本)
如果i==行数:
打破
screen.refresh()
box.refresh()
x=screen.getch()
诅咒
退出()

您在哪个平台上(包括版本)?您有什么Python版本,以及如何安装Python?(我的具体意思是,像“我从python.org下载并运行了3.4.1 64位Windows安装程序”或“我正在使用苹果预装的2.7.5”或“
apt get install python27
gived me version 2.7.5”或类似版本”)此外,我假设
wrapper(main)
被删除到第1列,否则这个程序不会做任何事情。那么,你的缩进的其余部分是对的,还是在我们运行它之前我们必须猜测一下?不需要猜测这是一个错误,我更新了这个问题。我的第一个想法是,一旦你按下一个键,你的程序将永远在这个循环中旋转,因为你再也不会调用
getch()
,可能您的平台不喜欢您以尽可能快的速度反复调用
refresh
。(显然,这在libcurses或Python包装器中都是一个bug,但仍然是一个您不应该触发的bug。)嗯,我尝试运行您的代码(在循环中移动
getch
调用之后),它对我来说很好。我可以很好地看到乱七八糟的文本,并且可以滚动它。我正在Debian上运行python 2.7.3。