Python + curses中的窗口最后一个字符

15 投票
2 回答
1967 浏览
提问于 2025-04-16 23:36

下面这个程序会报错:

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)

也就是说,捕捉并忽略这个错误,那么代码在设计和实现上会简单很多。

撰写回答