_curses.error:在newwin方法上将nlines更改为1时,addwstr()返回ERR

时间:2019-01-28 20:36:28

标签: python ncurses python-curses

代码是:

assert(term(Id,A,B,C))

我收到此错误:

from curses import *
from curses.panel import *

def main(stdscr):
    start_color()
    curs_set(0)
    init_pair(1, COLOR_BLACK, COLOR_CYAN)

    posy = posx = 0
    window = newwin(1, 1, posy, posx)
    panel = new_panel(window)
    window.addstr('*', color_pair(1))
    update_panels()
    doupdate()

    while True:
        key = stdscr.getch()

        if key == ord('j'):
            posy+=1
        elif key == ord('k'):
            posy-=1
        elif key == ord('h'):
            posx-=1
        elif key == ord('l'):
            posx+=1
        elif key == ord('q'):
            endwin()
            break
        panel.move(posy,posx)
        update_panels()
        doupdate()
if __name__ == '__main__':
    wrapper(main)

但是,如果我将第10行从window = newwin(1,1,posy,posx)更改为window = newwin(2,1,posy,posx),即将nlines args更改为大于1,那么它将正常工作。 / p>

我真的不明白为什么我遇到了这个问题。

1 个答案:

答案 0 :(得分:0)

addch 以及由此生成的任何内容(例如 addstr )都会打印文本并使光标前进过去打印的内容。

1x1 窗口不足以写一个字符并换行到下一行(因为您已填满该行)。当窗口为 2x1 时,它可以执行此操作。

ncurses(任何X / Open Curses)具有其他功能(例如addchstr),这些功能不会使光标前进,但是我看不到python curses reference中提到的功能。

由于ncurses会打印您想要的字符,并且这是一个孤立的情况,因此解决方法是将addstr包装在try语句中,例如

try:
    window.addstr('*', color_pair(1))
except curses.error:
    pass