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 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)

EDIT: Моя версия Python - 2.7.3 на Centos 6. Это была установка через yum, я думаю.

Есть идеи?

1 ответ

Попробуй это:

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()

licensed under cc by-sa 3.0 with attribution.