В [[Curses]], существуют объекты, сразными параметрами, для разметки и ореинтации в консоли. Ранее добавленный объект `stdscr`, является по сути объектом окна нашей консоли. ### Управление выводом текста - `addch(y, x, ch[, attr])` – вывести символ. - `addstr(y, x, str[, attr])` – вывести строку. - `insstr([y, x,] str[, attr])` – вставить строку. - `delch([y, x])` – удалить символ. ### Управление положением курсора - `move(y, x)` – переместить курсор. - `getyx()` – получить текущие координаты курсора. - `getbegyx()` – координаты верхнего-левого угла окна. - `getmyx()` – размеры окна (строки, колонки). ### Чтение ввода - `getch([y, x])` – получить символ/код клавиши. - `getkey([y, x])` – то же, но как строка (например `"KEY_LEFT"`). - `getstr([y, x])` – считать строку. - `nodelay(flag)` – включить/выключить неблокирующий ввод. - `timeout(ms)` – задать таймаут ожидания ввода. - ### Работа с экраном/окном - `clear()` – очистить окно. - `erase()` – стереть содержимое (похоже на `clear`, но без обновления). - `refresh()` – обновить экран, показать изменения. - `noutrefresh()` – отложенное обновление (для `doupdate()`). - `redrawwin()` – перерисовать окно. ### Атрибуты и цвет - `attron(attr)` – включить атрибут. - `attroff(attr)` – выключить атрибут. - `attrset(attr)` – установить атрибуты. - `bkgd(ch[, attr])` – задать символ/атрибут фона. - `bkgdset(ch[, attr])` – задать "фон по умолчанию". - `color_pair(n)` – использовать цветовую пару. ### Управление окнами - `subwin(nlines, ncols, begin_y, begin_x)` – создать подокно. - `derwin(nlines, ncols, begin_y, begin_x)` – "деривативное" окно. - `overlay(win)` – скопировать содержимое (не заменяя пробелы). - `overwrite(win)` – полностью переписать. - `box([vertch, horch])` – нарисовать рамку вокруг окна. - `border([...])` – нарисовать рамку со своими символами. ### Прокрутка - `scroll([n])` – прокрутить содержимое вверх. - `scrollok(flag)` – разрешить/запретить автопрокрутку. ### Дополнительно - `keypad(flag)` – включить/выключить поддержку функциональных клавиш. - `idlok(flag)` – оптимизировать обновление при вставке/удалении строк. - `leaveok(flag)` – разрешить оставлять курсор "где попало". - `touchwin()` – пометить всё окно для перерисовки. - `untouchwin()` – снять метки. - `is_wintouched()` – проверить, есть ли изменения. ### Обьекты окон В curses так же можно создавать окна отдельно от основного. Вот несколько обьектов окон для разметки в curses: #### newwin - обычное окно - Создаётся функцией `curses.newwin(nlines, ncols, begin_y, begin_x)`. - Можно сделать несколько таких окон в пределах `stdscr`. - Каждый объект — независимый `_curses.window`. Пример: ```python win = curses.newwin() ``` #### subwin - подокно - Создаётся как "срез" другого окна. - Разделяет память с родительским окном: изменения в одном видны в другом. - Удобно, если хочешь "разбить экран на части". Пример: ```python sub = stdscr.subwin(5, 20, 2, 5) ``` #### derwin - Дочернее окно - Похоже на subwin, но привязано к координатам внутри родительского окна, а не всего экрана. - Тоже разделяет буфер с родителем. Пример: ```python der = win.derwin(5, 20, 1, 1) ``` ### newpad - Pad - "Большое окно", которое может быть больше экрана. - Сам не отображается, нужно явно указывать какую часть показывать через pad.refresh(). - Удобно для скроллинга длинных текстов, логов и т. п. Пример: ```python pad = curses.newpad(100, 100) pad.refresh(pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol) ``` где - **`pminrow, pmincol`** — координаты внутри pad (откуда брать данные). - **`sminrow, smincol`** — верхний левый угол области на экране, куда будет выведен кусок pad. - **`smaxrow, smaxcol`** — нижний правый угол области на экране (включительно).