该模块curses.panel显示一个对话框。此subwin面板有一个区域,其中显示来自外部变量的文本消息。如果文本消息不包含新行并且超过了文本区域的大小,那么一切都没有问题(因为文本是通过添加的addnstr,这限制了整个文本的长度,与面板窗口的大小一致) . 但是,如果带有消息的变量包含换行符 (' \n') - 那么在消息不适合文本区域大小的情况下 - 会发生错误。
这是函数本身:
def Panel(screen, h, w, y, x, text):
new_window = curses.newwin(h, w, y, x)
new_window.erase()
new_window.box()
sub_window = new_window.subwin(h - 2, w - 2 , y + 1 , x + 1)
sub_window.addnstr(0, 0, text, ((h - 2) * (w - 2) - 1))
panel = curses.panel.new_panel(new_window)
curses.panel.update_panels()
screen.refresh()
screen.getch()
传递给函数的变量h和(窗口高度和宽度)是动态设置的。w也就是说,如果有换行符和小终端窗口,几乎总是会发生错误。
解决这个问题最简单的方法是什么?
我知道您可以编写一个单独的函数\n,根据窗口的宽度用空格替换 ' ',但也许有一些标准解决方案或更简单、更优雅的方法?
事实证明,使用该方法
insstr反而addnstr解决了问题,通过字符串插入insstr,无论它的大小是多少——都不会引发异常: