Проблема заключается в том, что добавленный символ приводит к попытке прокрутки пэда, а прокрутка отключена. Персонаж успешно добавлен (по крайней мере, на реализацию Ncurses моей системы): если вы ловите ошибку и обновления экрана, вы должны увидеть это:
import curses, time
def start(stdscr):
curses.start_color()
try:
curses.curs_set(0)
except curses.error:
pass
movement = curses.newpad(10, 10)
movement.addstr(8, 9, '+')
movement.addstr(9, 8, '+')
try:
movement.addstr(9, 9, '+')
except curses.error:
movement.addstr(0, 0, 'CAUGHT')
movement.refresh(0, 0, 0, 0, 9, 9)
curses.doupdate()
time.sleep(1)
if __name__ == '__main__':
curses.wrapper(start)
Если вы звоните movement.scrollok(True)
перед записью в правом нижнем углу, там не будет ошибки, но окно прокрутит: возможно, не то, что вы хотите.
Поскольку пэд может быть больше фактического экрана, одним простым решением является добавление дополнительной строки под частью, которую вы будете refresh
. Вы можете проверить, записаны ли вы в ту часть, которая не будет отображаться. Вот последний пример:
import curses, sys, time
def start(stdscr):
curses.start_color()
try:
curses.curs_set(0)
except curses.error:
pass
movement = curses.newpad(11, 10)
movement.addstr(8, 9, '+')
movement.addstr(9, 8, '+')
text = sys.argv[1] if len(sys.argv) > 1 else '+'
try:
movement.addstr(9, 9, text)
y, x = movement.getyx()
except curses.error:
y, x = movement.getyx()
movement.addstr(0, 0, 'CAUGHT')
if y >= 10 and x > 0:
movement.addstr(1, 0, 'toolong')
movement.refresh(0, 0, 0, 0, 9, 9)
curses.doupdate()
time.sleep(1)
if __name__ == '__main__':
curses.wrapper(start)
Запуск от имени python cursesx.py
и появляются плюсы; введите python cursesx.py foo
и появятся сообщения f
и toolong
; как python cursesx.py waytoolongtofit
, и w
, CAUGHT
и toolong
все сообщения появляются.