subwin窗口应该比内容大一号吗

问题描述

我有下面的一段代码,除非 n_rows > 3n_cols > 3,否则它不会工作。否则我会收到此错误

    Traceback (most recent call last):
      File "script.py",line 16,in <module>
        curses.wrapper(main)
      File "/usr/lib/python3.8/curses/__init__.py",line 105,in wrapper
        return func(stdscr,*args,**kwds)
      File "script.py",line 10,in main
        window.addstr(2,2,'2')
    _curses.error: addwstr() returned ERR

这种类型的错误通常发生在窗口外打印时(这里不是这种情况)。

    def main(stdscr):
        n_rows = 3
        n_cols = 3
        window = stdscr.subwin(n_rows,n_cols,0)
        window.addstr(0,'0')
        window.addstr(1,1,'1')
        window.addstr(2,'2')
    
        stdscr.getch()
    
    
    if __name__ == '__main__':
        curses.wrapper(main)

我的问题是什么解释了窗口必须大一号才能工作的原因?

解决方法

程序正在窗口的右下角打印并返回错误,因为它无法换行(或向上滚动)。

addch 联机帮助页说

  • 如果scrollok没有开启,在右下角写一个字符 保证金成功。但是,返回错误,因为它不是 可以换行

scrollok(除非明确设置否则为假):

scrollok 选项控制当窗口光标 移出窗口或滚动区域的边缘,或者作为 底行换行操作的结果,或键入最后一行的最后一个字符。如果禁用,(bf 是 FALSE),光标左移 在底线。如果启用(bf 是 TRUE),则滚动窗口 向上一行(注意要在终端上获得物理滚动效果,还需要调用idlok)。