LINUX.ORG.RU

Exception на последней строке и последнем символе.

 ,


0

1

Не могу понять, что происходит. Создаю новое окно, пытаюсь заполнить его одним символом полностью. На самом нижне-правом символе возникает исключение.

Причем, если проигнорить исключение, addch() рисует символ нормально.

Как починить?

Пример на котором это проявляется:

#!/usr/bin/env python3
import curses
import sys

class Subwin():
  def __init__(self, screen, size_lines, size_col):
    self.screen = screen
    self.win = screen.subwin(size_lines, size_col, 1, 1)

  def test(self):
    y_max, x_max = self.win.getmaxyx()
    for y in range(y_max):
      for x in range(x_max):
        try:
          self.win.addch(y, x, '*')
        except curses.error:
          self.screen.addstr(6, 0, 'Exception on Line: {} Column: {}'.format(y+1, x+1))
          self.screen.getch()

scr = curses.initscr()

w = Subwin(scr, 5, 11)
w.test()
w.screen.refresh()

curses.endwin()

Скорей всего `in range(y_max - 1)' и `in range(x_max - 1)'.

beastie ★★★★★ ()
Ответ на: комментарий от beastie

Разумеется это работает. Но только получится, что окно заполнится на 4 линии и 10 столбцов, а я задаю 5 и 11 в размере окна.

Причем бы мог понять и простить, если бы исключение было на всей последней линии и/или всём последнем столбце, но нет - тут строго нижне-правый угол.

greek_31 ★★ ()
Ответ на: комментарий от greek_31

Но курсору то куда-то двигаться надо то (за пределы окна)? (Давно curses не трогал, могу и ошибаться)

… at the right margin, the cursor automatically wraps to the beginning of the next line. — waddch(3)

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 2)
    try:
        self.win.addch(y, x, '*')
    except curses.error:
        pass
schizoid ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.