首先让我作为前言,我正在学习这个库,并且我正在努力使其工作,并将在以后的迭代中清理它。
那说我的代码抛出了这个错误:
Traceback (most recent call last):
File "cursesDemo1.py", line 30, in <module>
box3 = maketextbox(1,40, 10,20,"foo",deco="underline",textColorpair=curses.color_pair (0),decoColorpair=curses.color_pair(1))
_curses.error: must call start_color() first
我不确定在哪里需要致电start_color()
我似乎无法在谷歌上找到任何此错误的示例,也无法解决此问题。
我已经尝试过将其添加到任何地方并且难以接受任何人都可以给我一些关于在哪里寻找或示例的指导?
这是我的完整代码:
import curses
import time
screen = curses.initscr()
def maketextbox(h,w,y,x,value="",deco=None,underlineChr=curses.ACS_HLINE,textColorpair=0,decoColorpair=0):
nw = curses.newwin(h,w,y,x)
txtbox = curses.textpad.Textbox(nw)
if deco=="frame":
screen.attron(decoColorpair)
curses.textpad.rectangle(screen,y-1,x-1,y+h,x+w)
screen.attroff(decoColorpair)
elif deco=="underline":
screen.hline(y+1,x,underlineChr,w,decoColorpair)
nw.addstr(0,0,value,textColorpair)
nw.attron(textColorpair)
screen.refresh()
return txtbox
try:
screen.border(0)
box1 = curses.newwin(22, 50, 3, 5)
box1.box()
box2 = curses.newwin(22, 50, 3, 65)
box2.box()
box3 = maketextbox(1,40, 10,20,"foo",deco="underline",textColorpair=curses.color_pair (0),decoColorpair=curses.color_pair(1))
textInput = box3.edit()
box1.addstr(2, 18, "Functions")
box2.addstr(2, 18, "Processes")
screen.refresh()
box1.refresh()
box2.refresh()
box3.refresh()
for i in range(19):
toWrite = "Does this move run = %d" % i
box1.addstr(8, 9, toWrite)
box1.refresh()
time.sleep(5)
box2.addstr(8, 9, textInput)
screen.getch()
finally:
curses.endwin()
答案 0 :(得分:0)
在调用initscr后立即调用start_color。
IE:
if __name__ == "__main__":
screen = curses.initscr()
screen.start_color()
...
screen.endwin()
Eric S. Raymond的“使用ncurses编写程序”是对库的低级屏幕管理部分的一个很好的一般性介绍。你不需要知道C来理解它,因为库函数几乎可以直接映射到它们的Python对应物:1:1:
http://invisible-island.net/ncurses/ncurses-intro.html
另外:http://tinyurl.com/lgkyggq因为人们首先要问的是如何正确地实现滚动,并且该书的很大一部分涉及主题。
答案 1 :(得分:0)
在我的情况下(python 2.7),这段代码解决了我的问题:
curses.start_color()