Последний символ окна в python + curses

Следующая программа вызывает ошибку:

import curses

def test(scr):
  top = curses.newwin(1, 10, 0, 0)
  top.addstr(0, 9, "X")

curses.wrapper(test)

Похоже, что всякий раз, когда я пытаюсь использовать addstr() для записи символа в последнем столбце последней строки окна (даже когда он меньше экрана), он вызывает ошибку. Я не хочу прокручивать, меня не интересует позиция курсора. Все, что я хочу, - это писать символы в каждой позиции окна. Это вообще возможно? Как я могу это сделать?

Ответ 1

Похоже, что простое написание последнего символа окна невозможно с проклятиями по историческим причинам.

Единственное обходное решение, которое я смог найти, заключается в написании символа на одном месте слева от его конечного адресата и нажатии его с помощью вставки. Следующий код нажимает "X" на позицию 9:

top = curses.newwin(1, 10, 0, 0)
top.addstr(0, 8, "X")
top.insstr(0, 8, " ")

Ответ 2

Оказывается, что curses на самом деле заканчивает запись в эту последнюю позицию: он сразу вызывает ошибку.

Итак, если вы можете жить со следующим взломом /inelegance:

#! /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)

i.e, захват и игнорирование ошибки, тогда код будет намного проще как в дизайне, так и в реализации.