Files
knowledge_vault/Языки программирования/Curses - оконные объекты.md
2025-12-19 13:47:54 +05:00

5.6 KiB
Raw Blame History

В 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.

Пример:

win = curses.newwin()

subwin - подокно

  • Создаётся как "срез" другого окна.
  • Разделяет память с родительским окном: изменения в одном видны в другом.
  • Удобно, если хочешь "разбить экран на части".

Пример:

sub = stdscr.subwin(5, 20, 2, 5)

derwin - Дочернее окно

  • Похоже на subwin, но привязано к координатам внутри родительского окна, а не всего экрана.
  • Тоже разделяет буфер с родителем.

Пример:

der = win.derwin(5, 20, 1, 1)

newpad - Pad

  • "Большое окно", которое может быть больше экрана.
  • Сам не отображается, нужно явно указывать какую часть показывать через pad.refresh().
  • Удобно для скроллинга длинных текстов, логов и т. п.

Пример:

pad = curses.newpad(100, 100)
pad.refresh(pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol)

где

  • pminrow, pmincol — координаты внутри pad (откуда брать данные).
  • sminrow, smincol — верхний левый угол области на экране, куда будет выведен кусок pad.
  • smaxrow, smaxcol — нижний правый угол области на экране (включительно).