我只是一个使用“curses”的初学者,不能确定这是python的“curses”模块中的bug还是我的错误用法。在
我有以下测试代码:
import curses
import curses.textpad
screen = curses.initscr()
curses.noecho()
cl = curses.newwin( 15, 80, 10, 1 )
txtbox = curses.textpad.Textbox(cl,insert_mode=True)
def main( scr ):
global txtbox
s = txtbox.edit()
print(s)
if __name__ == '__main__':
ret = curses.wrapper( main )
当我运行它时,它开始正常,但是当按下任何键时,它开始无限递归并导致堆栈溢出。从curses/textpad.py
代码中可以看出,处理关键事件的函数实际上调用了自己:
是python的textpad.py
模块中的bug,还是我的代码中遗漏了一些curses的初始化步骤?在
我可以重现这个问题,它似乎是由在插入模式下使文本框的窗口“太宽”而触发的。避免多次初始化(包装器完成所有操作),请考虑:
但是,如果将第二个参数改为
newwin
回80,则会触发错误。(_insert_printable_char
中实现插入模式的递归似乎很好,它应该终止,因为它最终遇到了边框或不可打印字符,但显然当窗口太宽时就不会了)。在我将继续调试,添加日志以查看到底出了什么问题,但同时我想发布这篇文章,因为您可以使用稍微窄一点的窗口来避免触发bug)。在
相关问题 更多 >
编程相关推荐