Python + curses中的窗口最后一个字符
下面这个程序会报错:
import curses
def test(scr):
top = curses.newwin(1, 10, 0, 0)
top.addstr(0, 9, "X")
curses.wrapper(test)
我发现每次我试图用addstr()在窗口的最后一行最后一列写一个字符时(即使窗口比屏幕小),它都会报错。我不想滚动,也不在乎光标的位置。我只想在窗口的每一个位置都能写字符。这可能吗?我该怎么做呢?
2 个回答
12
看起来用curses库直接在窗口的最后一个位置写字符是做不到的,这个是有历史原因的。
我找到的唯一解决办法是先把字符写到目标位置左边一个的位置,然后通过插入的方式把它推到正确的位置。下面的代码会把“X”推到第9个位置:
top = curses.newwin(1, 10, 0, 0)
top.addstr(0, 8, "X")
top.insstr(0, 8, " ")
8
原来,curses
确实会在最后一个位置写入内容,只是在之后会报错。
所以,如果你能接受下面这个小技巧/不太优雅的做法:
#! /usr/bin/env python
import curses
def test(scr):
top = curses.newwin(1, 10, 0, 0)
try:
top.addstr(0, 9, "X")
except curses.error:
pass
curses.wrapper(test)
也就是说,捕捉并忽略这个错误,那么代码在设计和实现上会简单很多。