curses.md
1> **Источник:** https://python-all.ru/3.3/library/curses.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 16.11. [`curses`](https://python-all.ru/3.3/library/curses.html#module-curses) – работа с терминалом для символьных дисплеев89Модуль [`curses`](https://python-all.ru/3.3/library/curses.html#module-curses) предоставляет интерфейс к библиотеке curses, де-факто стандарту для портативной продвинутой обработки терминала.1011Хотя curses чаще всего используется в среде Unix, существуют версии для DOS, OS/2 и, возможно, других систем. Этот модуль расширения спроектирован так, чтобы соответствовать API ncurses – библиотеки curses с открытым исходным кодом, работающей на Linux и BSD-версиях Unix.1213> **Примечание**14>15> Начиная с версии 5.4 библиотека ncurses решает, как интерпретировать не-ASCII данные, используя функцию `nl_langinfo`. Это означает, что в приложении необходимо вызвать [`locale.setlocale()`](https://python-all.ru/3.3/library/locale.html#locale.setlocale) и кодировать строки Unicode с помощью одной из доступных кодировок системы. В этом примере используется системная кодировка по умолчанию:16>17> ```python18> import locale19> locale.setlocale(locale.LC_ALL, '')20> code = locale.getpreferredencoding()21> ```22>23> Затем *code* используется как кодировка для вызовов [`str.encode()`](https://python-all.ru/3.3/library/stdtypes.html#str.encode).2425> **См. также**26>27> **Модуль [`curses.ascii`](https://python-all.ru/3.3/library/curses.ascii.html#module-curses.ascii)**28>29> Утилиты для работы с ASCII-символами, независимо от настроек локали.30>31> **Модуль [`curses.panel`](https://python-all.ru/3.3/library/curses.panel.html#module-curses.panel)**32>33> Расширение стека панелей, добавляющее глубину окнам curses.34>35> **Модуль [`curses.textpad`](https://python-all.ru/3.3/library/curses.html#module-curses.textpad)**36>37> Виджет редактируемого текста для curses с поддержкой привязок, похожих на38>39> **Emacs**40>41> .42>43> **[*Программирование с curses в Python*](https://python-all.ru/3.3/howto/curses.html#curses-howto)**44>45> Учебный материал по использованию curses с Python, автор Эндрю Кучлинг и Эрик Рэймонд.46>47> В каталоге [Tools/demo/](https://python-all.ru/src/3.3/Tools/demo) дистрибутива исходного кода Python содержатся примеры программ, использующих привязки curses из этого модуля.4849## 16.11.1. Функции5051Модуль [`curses`](https://python-all.ru/3.3/library/curses.html#module-curses) определяет следующее исключение:5253#### `exception curses.error`5455Исключение, возникающее, когда функция библиотеки curses возвращает ошибку.5657> **Примечание**58>59> Если аргументы *x* или *y* функции или метода необязательны, они по умолчанию равны текущему положению курсора. Если *attr* необязателен, он по умолчанию равен `A_NORMAL`.6061Модуль [`curses`](https://python-all.ru/3.3/library/curses.html#module-curses) определяет следующие функции:6263#### `curses.baudrate()`6465Возвращает скорость вывода терминала в битах в секунду. На программных терминальных эмуляторах она будет иметь фиксированное высокое значение. Включена по историческим причинам; в прежние времена она использовалась для написания циклов вывода с временными задержками и иногда для изменения интерфейсов в зависимости от скорости линии.6667#### `curses.beep()`6869Издаёт короткий звуковой сигнал.7071#### `curses.can_change_color()`7273Возвращает `True` или `False` в зависимости от того, может ли программа изменять цвета, отображаемые терминалом.7475#### `curses.cbreak()`7677Включает режим cbreak. В режиме cbreak (иногда называемом режимом «rare») обычная построчная буферизация tty отключается и символы становятся доступными для посимвольного чтения. Однако, в отличие от raw-режима, специальные символы (прерывание, завершение, приостановка и управление потоком) сохраняют своё действие на драйвер tty и вызывающую программу. Вызов сначала [`raw()`](https://python-all.ru/3.3/library/curses.html#curses.raw), а затем [`cbreak()`](https://python-all.ru/3.3/library/curses.html#curses.cbreak) оставляет терминал в режиме cbreak.7879#### `curses.color_content(color_number)`8081Возвращает интенсивность красного, зелёного и синего (RGB) компонентов цвета *color\_number*, который должен быть в диапазоне от `0` до `COLORS`. Возвращается кортеж из трёх элементов, содержащий значения R, G, B для указанного цвета, которые будут в диапазоне от `0` (нет компонента) до `1000` (максимальное значение компонента).8283#### `curses.color_pair(color_number)`8485Возвращает значение атрибута для отображения текста указанным цветом. Это значение атрибута можно комбинировать с `A_STANDOUT`, `A_REVERSE` и другими атрибутами `A_*`. [`pair_number()`](https://python-all.ru/3.3/library/curses.html#curses.pair_number) является аналогом этой функции.8687#### `curses.curs_set(visibility)`8889Устанавливает состояние курсора. *visibility* может быть установлено в 0, 1 или 2 для невидимого, нормального или очень видимого режима. Если терминал поддерживает запрошенную видимость, возвращается предыдущее состояние курсора; в противном случае вызывается исключение. На многих терминалах режим «visible» – это подчёркнутый курсор, а режим «very visible» – блочный курсор.9091#### `curses.def_prog_mode()`9293Сохраняет текущий режим терминала как режим «program» – режим, когда запущенная программа использует curses. (Его аналог – режим «shell», для времени, когда программа не в curses.) Последующие вызовы [`reset_prog_mode()`](https://python-all.ru/3.3/library/curses.html#curses.reset_prog_mode) восстановят этот режим.9495#### `curses.def_shell_mode()`9697Сохраняет текущий режим терминала как режим «shell» – режим, когда запущенная программа не использует curses. (Его аналог – режим «program», когда программа использует возможности curses.) Последующие вызовы [`reset_shell_mode()`](https://python-all.ru/3.3/library/curses.html#curses.reset_shell_mode) восстановят этот режим.9899#### `curses.delay_output(ms)`100101Вставляет паузу в вывод на *ms* миллисекунд.102103#### `curses.doupdate()`104105Обновляет физический экран. Библиотека curses хранит две структуры данных: одна представляет текущее содержимое физического экрана, а виртуальный экран – желаемое следующее состояние. Функция [`doupdate()`](https://python-all.ru/3.3/library/curses.html#curses.doupdate) обновляет физический экран, чтобы он соответствовал виртуальному.106107Виртуальный экран можно обновить вызовом `noutrefresh()` после выполнения операций записи, таких как `addstr()`, над окном. Обычный вызов `refresh()` – это просто `noutrefresh()`, за которым следует [`doupdate()`](https://python-all.ru/3.3/library/curses.html#curses.doupdate); если нужно обновить несколько окон, можно ускорить работу и, возможно, уменьшить мерцание экрана, выполнив вызовы `noutrefresh()` для всех окон, а затем один вызов [`doupdate()`](https://python-all.ru/3.3/library/curses.html#curses.doupdate).108109#### `curses.echo()`110111Включает режим эхоповтора. В режиме эхоповтора каждый введённый символ отображается на экране по мере ввода.112113#### `curses.endwin()`114115Деинициализирует библиотеку и возвращает терминал в обычное состояние.116117#### `curses.erasechar()`118119Возвращает текущий символ стирания пользователя. В операционных системах Unix это свойство управляющего tty программы curses и не устанавливается самой библиотекой curses.120121#### `curses.filter()`122123Процедура [`filter()`](https://python-all.ru/3.3/library/curses.html#curses.filter), если используется, должна быть вызвана до вызова [`initscr()`](https://python-all.ru/3.3/library/curses.html#curses.initscr). Эффект заключается в том, что во время этих вызовов `LINES` устанавливается в 1; возможности clear, cup, cud, cud1, cuu1, cuu, vpa отключаются; а строка home устанавливается в значение cr. В результате курсор ограничен текущей строкой, и обновления экрана тоже. Это может быть использовано для посимвольного редактирования строки без затрагивания остального экрана.124125#### `curses.flash()`126127Мигает экраном. То есть переключает его в инверсный режим, а затем обратно через короткий интервал. Некоторые люди предпочитают такой «видимый звонок» звуковому сигналу внимания, который воспроизводит [`beep()`](https://python-all.ru/3.3/library/curses.html#curses.beep).128129#### `curses.flushinp()`130131Очищает все входные буферы. Отбрасывает любой упреждающий ввод, который был набран пользователем, но ещё не обработан программой.132133#### `curses.getmouse()`134135После того как `getch()` возвращает `KEY_MOUSE`, сигнализируя о событии мыши, этот метод должен быть вызван для получения поставленного в очередь события мыши, представленного в виде 5-кортежа `(id, x, y, z, bstate)`. *id* – это значение идентификатора, используемое для различения нескольких устройств, а *x*, *y*, *z* – координаты события. (*z* в настоящее время не используется.) *bstate* – целочисленное значение, биты которого установлены для указания типа события, и оно будет представлять собой побитовое ИЛИ одной или нескольких следующих констант, где *n* – номер кнопки от 1 до 4: `BUTTONn_PRESSED`, `BUTTONn_RELEASED`, `BUTTONn_CLICKED`, `BUTTONn_DOUBLE_CLICKED`, `BUTTONn_TRIPLE_CLICKED`, `BUTTON_SHIFT`, `BUTTON_CTRL`, `BUTTON_ALT`.136137#### `curses.getsyx()`138139Возвращает текущие координаты виртуального курсора экрана по y и x. Если leaveok в данный момент истинно, возвращается -1,-1.140141#### `curses.getwin(file)`142143Читает данные окна, сохранённые в файле более ранним вызовом `putwin()`. Затем процедура создаёт и инициализирует новое окно с использованием этих данных, возвращая новый объект окна.144145#### `curses.has_colors()`146147Возвращает `True`, если терминал может отображать цвета; в противном случае возвращает `False`.148149#### `curses.has_ic()`150151Возвращает `True`, если терминал имеет возможности вставки и удаления символов. Эта функция включена только по историческим причинам, так как все современные программные эмуляторы терминалов обладают такими возможностями.152153#### `curses.has_il()`154155Возвращает `True`, если терминал имеет возможности вставки и удаления строк или может имитировать их с помощью областей прокрутки. Эта функция включена только по историческим причинам, так как все современные программные эмуляторы терминалов обладают такими возможностями.156157#### `curses.has_key(ch)`158159Принимает значение ключа *ch* и возвращает `True`, если текущий тип терминала распознаёт ключ с таким значением.160161#### `curses.halfdelay(tenths)`162163Используется для полузадержанного режима, который похож на режим cbreak тем, что символы, вводимые пользователем, немедленно становятся доступными программе. Однако после блокировки на *tenths* десятых долей секунды возникает исключение, если ничего не было введено. Значение *tenths* должно быть числом между `1` и `255`. Используйте [`nocbreak()`](https://python-all.ru/3.3/library/curses.html#curses.nocbreak) для выхода из полузадержанного режима.164165#### `curses.init_color(color_number, r, g, b)`166167Изменяет определение цвета, принимая номер изменяемого цвета, за которым следуют три значения RGB (для количества красной, зелёной и синей составляющих). Значение *color\_number* должно быть между `0` и `COLORS`. Каждое из *r*, *g*, *b* должно быть значением между `0` и `1000`. Когда используется [`init_color()`](https://python-all.ru/3.3/library/curses.html#curses.init_color), все вхождения этого цвета на экране немедленно изменяются на новое определение. Эта функция ничего не делает на большинстве терминалов; она активна только если [`can_change_color()`](https://python-all.ru/3.3/library/curses.html#curses.can_change_color) возвращает `1`.168169#### `curses.init_pair(pair_number, fg, bg)`170171Изменяет определение цветовой пары. Требует три аргумента: номер изменяемой цветовой пары, номер цвета переднего плана и номер цвета фона. Значение *pair\_number* должно быть между `1` и `COLOR_PAIRS - 1` (цветовая пара `0` жёстко задана как белый на чёрном и не может быть изменена). Значения аргументов *fg* и *bg* должны быть между `0` и `COLORS`. Если цветовая пара была предварительно инициализирована, экран обновляется и все вхождения этой цветовой пары изменяются на новое определение.172173#### `curses.initscr()`174175Инициализирует библиотеку. Возвращает `WindowObject`, представляющий весь экран.176177> **Примечание**178>179> Если при открытии терминала возникает ошибка, базовая библиотека curses может вызвать завершение интерпретатора.180181#### `curses.is_term_resized(nlines, ncols)`182183Возвращает `True`, если [`resize_term()`](https://python-all.ru/3.3/library/curses.html#curses.resize_term) изменит структуру окна, в противном случае – `False`.184185#### `curses.isendwin()`186187Возвращает `True`, если функция [`endwin()`](https://python-all.ru/3.3/library/curses.html#curses.endwin) была вызвана (то есть библиотека curses была деинициализирована).188189#### `curses.keyname(k)`190191Возвращает имя клавиши с номером *k*. Имя клавиши, генерирующей печатный символ ASCII, совпадает с этим символом. Имя управляющей комбинации клавиш – это строка из двух символов: знак ^, за которым следует соответствующий печатный символ ASCII. Имя комбинации с клавишей Alt (128–255) – это строка с префиксом «M-», за которым следует имя соответствующего символа ASCII.192193#### `curses.killchar()`194195Возвращает текущий символ удаления строки пользователя. В операционных системах Unix это свойство управляющего tty программы curses и не устанавливается самой библиотекой curses.196197#### `curses.longname()`198199Возвращает строку, содержащую поле длинного имени terminfo, описывающее текущий терминал. Максимальная длина подробного описания – 128 символов. Оно определено только после вызова [`initscr()`](https://python-all.ru/3.3/library/curses.html#curses.initscr).200201#### `curses.meta(yes)`202203Если *yes* равно 1, разрешает ввод 8-битных символов. Если *yes* равно 0, разрешает только 7-битные символы.204205#### `curses.mouseinterval(interval)`206207Устанавливает максимальное время в миллисекундах, которое может пройти между событиями нажатия и отпускания, чтобы они были распознаны как щелчок, и возвращает предыдущее значение интервала. Значение по умолчанию – 200 мс, то есть одна пятая секунды.208209#### `curses.mousemask(mousemask)`210211Устанавливает, какие события мыши должны сообщаться, и возвращает кортеж `(availmask, oldmask)`. *availmask* указывает, какие из указанных событий мыши могут быть сообщены; в случае полного отказа возвращается 0. *oldmask* – предыдущее значение маски событий мыши для данного окна. Если эта функция никогда не вызывается, события мыши не сообщаются.212213#### `curses.napms(ms)`214215Приостанавливает выполнение на *ms* миллисекунд.216217#### `curses.newpad(nlines, ncols)`218219Создаёт и возвращает указатель на новую структуру данных pad с указанным количеством строк и столбцов. Pad возвращается как объект окна.220221Pad напоминает окно, но не ограничен размером экрана и не обязательно связан с определённой частью экрана. Pad можно использовать, когда требуется большое окно, а на экране в каждый момент видна только его часть. Автоматическое обновление pad (например, при прокрутке или эхо-вводе) не происходит. Методы `refresh()` и `noutrefresh()` pad требуют 6 аргументов для указания отображаемой области pad и места на экране для её отображения. Аргументы: *pminrow*, *pmincol*, *sminrow*, *smincol*, *smaxrow*, *smaxcol*; аргументы с *p* относятся к верхнему левому углу отображаемой области pad и аргументы с *s* определяют ограничивающий прямоугольник на экране, в пределах которого область pad будет отображаться.222223#### `curses.newwin(nlines, ncols)`224225#### `curses.newwin(nlines, ncols, begin_y, begin_x)`226227Возвращает новое окно, левый верхний угол которого находится в `(begin_y, begin_x)`, а его высота/ширина равна *nlines*/*ncols*.228229По умолчанию окно будет расширяться от указанной позиции до нижнего правого угла экрана.230231#### `curses.nl()`232233Включает режим перевода строки. В этом режиме клавиша возврата каретки преобразуется в перевод строки при вводе, а перевод строки преобразуется в возврат каретки и перевод строки при выводе. Режим перевода строки изначально включен.234235#### `curses.nocbreak()`236237Выходит из режима cbreak. Возвращается к обычному «cooked»-режиму с буферизацией строк.238239#### `curses.noecho()`240241Выходит из режима эхопечати. Эхо-вывод вводимых символов отключается.242243#### `curses.nonl()`244245Выходит из режима новой строки. Отключает преобразование возврата каретки в новую строку при вводе и oтключает низкоуровневое преобразование новой строки в новую строку/возврат каретки при выводе (но это не меняет поведение `addch('\n')`, которая всегда выполняет eквивалент возврата каретки и перевода строки на виртуальном экране). При отключённом преобразовании curses иногда может немного ускорить вертикальное перемещение; кроме того, он сможет обнаруживать нажатие клавиши возврата каретки при вводе.246247#### `curses.noqiflush()`248249При использовании процедуры [`noqiflush()`](https://python-all.ru/3.3/library/curses.html#curses.noqiflush) обычная очистка очередей ввода и вывода, связанных с символами INTR, QUIT и SUSP, не производится. Возможно, вы захотите вызвать [`noqiflush()`](https://python-all.ru/3.3/library/curses.html#curses.noqiflush) в обработчике сигнала, если хотите, чтобы вывод продолжался, как если бы прерывание не произошло, после завершения обработчика.250251#### `curses.noraw()`252253Выходит из режима raw. Возвращается к обычному «cooked»-режиму с буферизацией строк.254255#### `curses.pair_content(pair_number)`256257Возвращает кортеж `(fg, bg)`, содержащий цвета для запрошенной цветовой пары. Значение *pair\_number* должно быть между `1` и `COLOR_PAIRS - 1`.258259#### `curses.pair_number(attr)`260261Возвращает номер цветовой пары, заданной значением атрибута *attr*. [`color_pair()`](https://python-all.ru/3.3/library/curses.html#curses.color_pair) является аналогом этой функции.262263#### `curses.putp(string)`264265Эквивалентно `tputs(str, 1, putchar)`; выводит значение указанной возможности terminfo для текущего терминала. Обратите внимание, что вывод [`putp()`](https://python-all.ru/3.3/library/curses.html#curses.putp) всегда направляется в стандартный вывод.266267#### `curses.qiflush([flag])`268269Если *flag* равен `False`, эффект аналогичен вызову [`noqiflush()`](https://python-all.ru/3.3/library/curses.html#curses.noqiflush). Если *flag* равен `True` или аргумент не указан, очереди будут сброшены при чтении этих управляющих символов.270271#### `curses.raw()`272273Переход в необработанный режим. В необработанном режиме отключаются обычная буферизация строк и обработка клавиш прерывания, выхода, приостановки и управления потоком; символы передаются функциям ввода curses по одному.274275#### `curses.reset_prog_mode()`276277Восстанавливает терминал в «программный» режим, как было сохранено ранее с помощью [`def_prog_mode()`](https://python-all.ru/3.3/library/curses.html#curses.def_prog_mode).278279#### `curses.reset_shell_mode()`280281Восстанавливает терминал в «оболочечный» режим, как было сохранено ранее с помощью [`def_shell_mode()`](https://python-all.ru/3.3/library/curses.html#curses.def_shell_mode).282283#### `curses.resetty()`284285Восстанавливает состояние режимов терминала до того, каким оно было при последнем вызове [`savetty()`](https://python-all.ru/3.3/library/curses.html#curses.savetty).286287#### `curses.resize_term(nlines, ncols)`288289Внутренняя функция, используемая [`resizeterm()`](https://python-all.ru/3.3/library/curses.html#curses.resizeterm), выполняющая большую часть работы; при изменении размера окон [`resize_term()`](https://python-all.ru/3.3/library/curses.html#curses.resize_term) заполняет пробелами расширяемые области. Вызывающая программа должна заполнить эти области соответствующими данными. Функция [`resize_term()`](https://python-all.ru/3.3/library/curses.html#curses.resize_term) пытается изменить размер всех окон. Однако из-за соглашения о вызовах для панелей изменить их размер без дополнительного взаимодействия с приложением невозможно.290291#### `curses.resizeterm(nlines, ncols)`292293Изменяет размеры стандартного и текущего окон до указанных размеров и корректирует другие служебные данные, используемые библиотекой curses для записи размеров окон (в частности, обработчик SIGWINCH).294295#### `curses.savetty()`296297Сохраняет текущее состояние режимов терминала в буфере, который может быть использован [`resetty()`](https://python-all.ru/3.3/library/curses.html#curses.resetty).298299#### `curses.setsyx(y, x)`300301Устанавливает виртуальный курсор экрана в позицию *y*, *x*. Если *y* и *x* оба равны -1, то устанавливается leaveok.302303#### `curses.setupterm([termstr, fd])`304305Инициализирует терминал. *termstr* – строка, задающая имя терминала; если опущено, будет использовано значение переменной окружения `TERM`. *fd* – это файловый дескриптор, на который будут отправлены все последовательности инициализации; если не указан, будет использован файловый дескриптор для `sys.stdout`.306307#### `curses.start_color()`308309Должна быть вызвана, если программист хочет использовать цвета, и до вызова любой другой процедуры управления цветом. Рекомендуется вызывать эту процедуру сразу после [`initscr()`](https://python-all.ru/3.3/library/curses.html#curses.initscr).310311[`start_color()`](https://python-all.ru/3.3/library/curses.html#curses.start_color) инициализирует восемь основных цветов (чёрный, красный, зелёный, жёлтый, синий, пурпурный, голубой и белый), а также две глобальные переменные в модуле [`curses`](https://python-all.ru/3.3/library/curses.html#module-curses) – `COLORS` и `COLOR_PAIRS`, содержащие максимальное количество цветов и цветовых пар, которое поддерживает терминал. Кроме того, она восстанавливает цвета на терминале до значений, которые были при его включении.312313#### `curses.termattrs()`314315Возвращает логическое ИЛИ всех видеоатрибутов, поддерживаемых терминалом. Эта\\nинформация полезна, когда программа curses требует полного контроля над\\nвнешним видом экрана.316317#### `curses.termname()`318319Возвращает значение переменной окружения `TERM`, усечённое до 14 символов.320321#### `curses.tigetflag(capname)`322323Возвращает значение логической возможности, соответствующей имени возможности terminfo *capname*. Значение `-1` возвращается, если *capname* не является логической возможностью, или `0`, если она отменена или отсутствует в описании терминала.324325#### `curses.tigetnum(capname)`326327Возвращает значение числовой возможности, соответствующей имени возможности terminfo *capname*. Значение `-2` возвращается, если *capname* не является числовой возможностью, или `-1`, если она отменена или отсутствует в описании терминала.328329#### `curses.tigetstr(capname)`330331Возвращает значение строковой возможности, соответствующей имени возможности terminfo *capname*. `None` возвращается, если *capname* не является строковой возможностью, либо отменена или отсутствует в описании терминала.332333#### `curses.tparm(str[, ...])`334335Инстанцирует строку *str* с переданными параметрами, где *str* должна быть параметризованной строкой, полученной из базы данных terminfo. Например, `tparm(tigetstr("cup"), 5, 3)` может дать `b'\033[6;4H'`; точный результат зависит от типа терминала.336337#### `curses.typeahead(fd)`338339Указывает, что файловый дескриптор *fd* должен использоваться для проверки упреждающего ввода. Если *fd* равен `-1`, то проверка упреждающего ввода не выполняется.340341Библиотека curses выполняет «оптимизацию прерывания строки» (line-breakout optimization), периодически проверяя упреждающий ввод\\nво время обновления экрана. Если ввод обнаружен и поступает с tty,\\nтекущее обновление откладывается до следующего вызова refresh или doupdate,\\nчто обеспечивает более быстрый ответ на заранее введённые команды. Эта функция\\nпозволяет указать другой файловый дескриптор для проверки упреждающего ввода.342343#### `curses.unctrl(ch)`344345Возвращает строку, которая является печатным представлением символа *ch*. Управляющие символы отображаются как символ каретки, за которым следует символ, например, как `^C`. Печатные символы остаются без изменений.346347#### `curses.ungetch(ch)`348349Помещает *ch* в очередь, чтобы следующий вызов `getch()` вернул его.350351> **Примечание**352>353> Только один *ch* может быть помещён до вызова `getch()`.354355#### `curses.unget_wch(ch)`356357Помещает *ch* так, что следующий `get_wch()` вернёт его.358359> **Примечание**360>361> Перед вызовом `get_wch()` можно поместить только один *ch*.362363Новое в версии 3.3.364365#### `curses.ungetmouse(id, x, y, z, bstate)`366367Помещает событие `KEY_MOUSE` во входную очередь, связывая с ним переданные данные состояния.368369#### `curses.use_env(flag)`370371Если используется, эту функцию следует вызывать до вызова [`initscr()`](https://python-all.ru/3.3/library/curses.html#curses.initscr) или newterm. Когда *flag* равен `False`, будут использоваться значения строк и столбцов, указанные в базе данных terminfo, даже если установлены переменные окружения `LINES` и `COLUMNS` (используемые по умолчанию), или если curses выполняется в окне (в этом случае поведение по умолчанию – использовать размер окна, если `LINES` и `COLUMNS` не заданы).372373#### `curses.use_default_colors()`374375Разрешает использование значений по умолчанию для цветов на терминалах, поддерживающих эту возможность. Это позволяет поддерживать прозрачность в приложении. Цвет по умолчанию назначается номеру цвета -1. После вызова этой функции `init_pair(x, curses.COLOR_RED, -1)` инициализирует, например, цветовую пару *x* с красным цветом переднего плана на фоне по умолчанию.376377#### `curses.wrapper(func, ...)`378379Инициализирует curses и вызывает другой вызываемый объект *func*, который должен быть остальной частью вашего приложения, использующего curses. Если приложение вызывает исключение, эта функция восстановит терминал в нормальное состояние перед повторным возбуждением исключения и генерацией трассировки. Вызываемому объекту *func* затем передаётся главное окно 'stdscr' в качестве первого аргумента, за которым следуют любые другие аргументы, переданные в [`wrapper()`](https://python-all.ru/3.3/library/curses.html#curses.wrapper). Перед вызовом *func*, [`wrapper()`](https://python-all.ru/3.3/library/curses.html#curses.wrapper) включает режим cbreak, отключает эхо, включает клавиатуру терминала и инициализирует цвета, если терминал поддерживает цвет. При выходе (как нормальном, так и по исключению) она восстанавливает cooked-режим, включает эхо и отключает клавиатуру терминала.380381## 16.11.2. Объекты окон382383Объекты окон, возвращаемые [`initscr()`](https://python-all.ru/3.3/library/curses.html#curses.initscr) и [`newwin()`](https://python-all.ru/3.3/library/curses.html#curses.newwin) (см. выше), имеют следующие методы и атрибуты:384385#### `window.addch(ch[, attr])`386387#### `window.addch(y, x, ch[, attr])`388389> **Примечание**390>391> Под *character* понимается символ C (код ASCII), а не символ Python (строка длины 1). (Это замечание верно везде, где в документации упоминается символ.) Встроенная функция [`ord()`](https://python-all.ru/3.3/library/functions.html#ord) удобна для преобразования строк в коды.392393Рисует символ *ch* в позиции `(y, x)` с атрибутами *attr*, перезаписывая любой символ, ранее нарисованный в этой позиции. По умолчанию позиция символа и атрибуты берутся из текущих настроек объекта окна.394395#### `window.addnstr(str, n[, attr])`396397#### `window.addnstr(y, x, str, n[, attr])`398399Рисует не более *n* символов строки *str* в позиции `(y, x)` с атрибутами *attr*, перезаписывая всё, что было на экране ранее.400401#### `window.addstr(str[, attr])`402403#### `window.addstr(y, x, str[, attr])`404405Рисует строку *str* в позиции `(y, x)` с атрибутами *attr*, перезаписывая всё, что было на экране ранее.406407#### `window.attroff(attr)`408409Удаляет атрибут *attr* из набора «фоновых» атрибутов, применяемых ко всем записям в текущее окно.410411#### `window.attron(attr)`412413Добавить атрибут *attr* из набора «фоновых» атрибутов, применяемых ко всем записям в текущее окно.414415#### `window.attrset(attr)`416417Устанавливает «фоновый» набор атрибутов в *attr*. Изначально этот набор равен 0 (нет атрибутов).418419#### `window.bkgd(ch[, attr])`420421Устанавливает фоновое свойство окна на символ *ch* с атрибутами *attr*. Затем изменение применяется ко всем позициям символов в этом окне:422423- Атрибут каждого символа в окне изменяется на новый фоновый атрибут.424- Везде, где встречается прежний фоновый символ, он заменяется на новый фоновый символ.425426#### `window.bkgdset(ch[, attr])`427428Устанавливает фон окна. Фон окна состоит из символа и любой комбинации атрибутов. Часть атрибута фона комбинируется (логическим ИЛИ) со всеми непустыми символами, которые записываются в окно. Как символьная, так и атрибутная части фона комбинируются с пустыми символами. Фон становится свойством символа и перемещается вместе с символом при любых операциях прокрутки, вставки/удаления строк/символов.429430#### `window.border([ls[, rs[, ts[, bs[, tl[, tr[, bl[, br]]]]]]]])`431432Рисует рамку по краям окна. Каждый параметр задаёт символ для определённой части рамки; подробнее см. таблицу ниже. Символы могут быть заданы как целые числа или как строки из одного символа.433434> **Примечание**435>436> Значение `0` для любого параметра приводит к использованию символа по умолчанию для этого параметра. Именованные параметры могут *не* быть использованы. Значения по умолчанию перечислены в этой таблице:437438| Параметр | Описание | Значение по умолчанию |439| --- | --- | --- |440| *ls* | Левая сторона | `ACS_VLINE` |441| *rs* | Правая сторона | `ACS_VLINE` |442| *ts* | Верх | `ACS_HLINE` |443| *bs* | Низ | `ACS_HLINE` |444| *tl* | Верхний левый угол | `ACS_ULCORNER` |445| *tr* | Верхний правый угол | `ACS_URCORNER` |446| *bl* | Нижний левый угол | `ACS_LLCORNER` |447| *br* | Нижний правый угол | `ACS_LRCORNER` |448449#### `window.box([vertch, horch])`450451Аналогична [`border()`](https://python-all.ru/3.3/library/curses.html#curses.window.border), но оба параметра *ls* и *rs* задаются *vertch*, а *ts* и *bs* – *horch*. Эта функция всегда использует символы углов по умолчанию.452453#### `window.chgat(attr)`454455#### `window.chgat(num, attr)`456457#### `window.chgat(y, x, attr)`458459#### `window.chgat(y, x, num, attr)`460461Устанавливает атрибуты *num* символов на текущей позиции курсора или, если задана, на позиции `(y, x)`. Если значение *num* не указано или *num* = -1, атрибут будет установлен для всех символов до конца строки. Эта функция не перемещает курсор. Изменённая строка помечается с помощью метода [`touchline()`](https://python-all.ru/3.3/library/curses.html#curses.window.touchline), чтобы её содержимое было перерисовано при следующем обновлении окна.462463#### `window.clear()`464465Как [`erase()`](https://python-all.ru/3.3/library/curses.html#curses.window.erase), но также вызывает перерисовку всего окна при следующем вызове [`refresh()`](https://python-all.ru/3.3/library/curses.html#curses.window.refresh).466467#### `window.clearok(yes)`468469Если *yes* равно 1, следующий вызов [`refresh()`](https://python-all.ru/3.3/library/curses.html#curses.window.refresh) полностью очистит окно.470471#### `window.clrtobot()`472473Стирает от курсора до конца окна: все строки ниже курсора удаляются, а затем выполняется действие, эквивалентное [`clrtoeol()`](https://python-all.ru/3.3/library/curses.html#curses.window.clrtoeol).474475#### `window.clrtoeol()`476477Стирает от курсора до конца строки.478479#### `window.cursyncup()`480481Обновляет текущую позицию курсора всех родительских окон, чтобы она отражала текущую позицию курсора данного окна.482483#### `window.delch([y, x])`484485Удаляет символ на позиции `(y, x)`.486487#### `window.deleteln()`488489Удаляет строку под курсором. Все последующие строки сдвигаются вверх на одну.490491#### `window.derwin(begin_y, begin_x)`492493#### `window.derwin(nlines, ncols, begin_y, begin_x)`494495Аббревиатура от «derive window» (производное окно), [`derwin()`](https://python-all.ru/3.3/library/curses.html#curses.window.derwin) аналогична вызову [`subwin()`](https://python-all.ru/3.3/library/curses.html#curses.window.subwin), за исключением того, что *begin\_y* и *begin\_x* задаются относительно начала окна, а не всего экрана. Возвращает объект окна для производного окна.496497#### `window.echochar(ch[, attr])`498499Добавляет символ *ch* с атрибутом *attr* и сразу же вызывает [`refresh()`](https://python-all.ru/3.3/library/curses.html#curses.window.refresh) для окна.500501#### `window.enclose(y, x)`502503Проверяет, принадлежат ли заданные координаты символьной ячейки (относительно экрана) данному окну. Возвращает `True` или `False`. Полезно для определения того, какие окна экрана содержат позицию события мыши.504505#### `window.encoding`506507Кодировка, используемая для кодирования аргументов методов (строки Unicode и символы). Атрибут encoding наследуется от родительского окна при создании подокна, например, с помощью [`window.subwin()`](https://python-all.ru/3.3/library/curses.html#curses.window.subwin). По умолчанию используется кодировка локали (см. [`locale.getpreferredencoding()`](https://python-all.ru/3.3/library/locale.html#locale.getpreferredencoding)).508509Новое в версии 3.3.510511#### `window.erase()`512513Очищает окно.514515#### `window.getbegyx()`516517Возвращает кортеж `(y, x)` координат верхнего левого угла.518519#### `window.getbkgd()`520521Возвращает текущую пару символ/атрибут фона для указанного окна.522523#### `window.getch([y, x])`524525Возвращает символ. Обратите внимание: возвращаемое целое число *не* обязательно должно быть в диапазоне ASCII: функциональные клавиши, клавиши цифровой клавиатуры и тому подобное возвращают числа больше 256. В режиме без задержки возвращается -1, если нет ввода, иначе [`getch()`](https://python-all.ru/3.3/library/curses.html#curses.window.getch) ожидает нажатия клавиши.526527#### `window.get_wch([y, x])`528529Получает широкий символ. Возвращает символ для большинства клавиш или целое число для функциональных клавиш, клавиш цифровой клавиатуры и других специальных клавиш.530531Новое в версии 3.3.532533#### `window.getkey([y, x])`534535Возвращает символ в виде строки, а не целого числа, как [`getch()`](https://python-all.ru/3.3/library/curses.html#curses.window.getch) делает. Функциональные клавиши, клавиши цифровой клавиатуры и другие специальные клавиши возвращают многобайтовую строку, содержащую имя клавиши. В режиме без задержки, если нет ввода, вызывается исключение.536537#### `window.getmaxyx()`538539Возвращает кортеж `(y, x)` высоты и ширины окна.540541#### `window.getparyx()`542543Возвращает начальные координаты этого окна относительно его родительского окна в две целые переменные y и x. Возвращает `-1, -1`, если это окно не имеет родителя.544545#### `window.getstr([y, x])`546547Читает строку от пользователя, с примитивной возможностью редактирования строки.548549#### `window.getyx()`550551Возвращает кортеж `(y, x)` текущей позиции курсора относительно верхнего левого угла окна.552553#### `window.hline(ch, n)`554555#### `window.hline(y, x, ch, n)`556557Отображает горизонтальную линию, начинающуюся в точке `(y, x)`, длиной *n*, состоящую из символа *ch*.558559#### `window.idcok(flag)`560561Если *flag* равен `False`, curses больше не использует аппаратную функцию вставки/удаления символов терминала; если *flag* равен `True`, использование вставки и удаления символов включается. При первой инициализации curses использование вставки/удаления символов включено по умолчанию.562563#### `window.idlok(yes)`564565Если вызвать с *yes*, равным 1, [`curses`](https://python-all.ru/3.3/library/curses.html#module-curses) попытается использовать аппаратные средства редактирования строк. В противном случае вставка/удаление строк отключены.566567#### `window.immedok(flag)`568569Если *flag* равен `True`, любое изменение изображения окна автоматически вызывает его обновление; больше не нужно вызывать [`refresh()`](https://python-all.ru/3.3/library/curses.html#curses.window.refresh) самостоятельно. Однако это может существенно снизить производительность из-за многократных вызовов wrefresh. Эта опция по умолчанию отключена.570571#### `window.inch([y, x])`572573Возвращает символ в указанной позиции окна. Младшие 8 бит – это сам символ, а старшие биты – атрибуты.574575#### `window.insch(ch[, attr])`576577#### `window.insch(y, x, ch[, attr])`578579Рисует символ *ch* в точке `(y, x)` с атрибутами *attr*, сдвигая строку от позиции *x* вправо на один символ.580581#### `window.insdelln(nlines)`582583Вставляет *nlines* строк в указанное окно над текущей строкой. *nlines* нижних строк теряются. При отрицательном *nlines* удаляет *nlines* строк, начиная с той, на которой находится курсор, и сдвигает оставшиеся строки вверх. Нижние *nlines* строк очищаются. Текущая позиция курсора остаётся неизменной.584585#### `window.insertln()`586587Вставляет пустую строку под курсором. Все последующие строки сдвигаются на одну строку вниз.588589#### `window.insnstr(str, n[, attr])`590591#### `window.insnstr(y, x, str, n[, attr])`592593Вставляет строку символов (столько символов, сколько помещается на строке) перед символом под курсором, до *n* символов. Если *n* равно нулю или отрицательно, вставляется вся строка. Все символы справа от курсора сдвигаются вправо, при этом крайние правые символы строки теряются. Позиция курсора не меняется (после перемещения в *y*, *x*, если указано).594595#### `window.insstr(str[, attr])`596597#### `window.insstr(y, x, str[, attr])`598599Вставляет строку символов (столько символов, сколько помещается на строке) перед символом под курсором. Все символы справа от курсора сдвигаются вправо, при этом крайние правые символы строки теряются. Позиция курсора не меняется (после перемещения в *y*, *x*, если указано).600601#### `window.instr([n])`602603#### `window.instr(y, x[, n])`604605Возвращает строку символов, извлечённую из окна, начиная с текущей позиции курсора или с *y*, *x*, если указано. Атрибуты символов удаляются. Если указан *n*, [`instr()`](https://python-all.ru/3.3/library/curses.html#curses.window.instr) возвращает строку длиной не более *n* символов (без учёта завершающего нулевого символа).606607#### `window.is_linetouched(line)`608609Возвращает `True`, если указанная строка была изменена после последнего вызова [`refresh()`](https://python-all.ru/3.3/library/curses.html#curses.window.refresh); иначе возвращает `False`. Возбуждает исключение [`curses.error`](https://python-all.ru/3.3/library/curses.html#curses.error), если *line* недопустима для данного окна.610611#### `window.is_wintouched()`612613Возвращает `True`, если указанное окно было изменено после последнего вызова [`refresh()`](https://python-all.ru/3.3/library/curses.html#curses.window.refresh); иначе возвращает `False`.614615#### `window.keypad(yes)`616617Если *yes* равно 1, управляющие последовательности, генерируемые некоторыми клавишами (цифровая клавиатура, функциональные клавиши), будут интерпретироваться [`curses`](https://python-all.ru/3.3/library/curses.html#module-curses). Если *yes* равно 0, управляющие последовательности остаются как есть во входном потоке.618619#### `window.leaveok(yes)`620621Если *yes* равно 1, курсор остаётся на месте при обновлении, а не перемещается в «позицию курсора». Это уменьшает перемещение курсора, где это возможно. Если возможно, курсор будет сделан невидимым.622623Если *yes* равно 0, курсор всегда будет находиться в «позиции курсора» после обновления.624625#### `window.move(new_y, new_x)`626627Перемещает курсор в `(new_y, new_x)`.628629#### `window.mvderwin(y, x)`630631Перемещает окно внутри его родительского окна. Экранно-относительные параметры окна не изменяются. Эта процедура используется для отображения разных частей родительского окна в одной и той же физической позиции на экране.632633#### `window.mvwin(new_y, new_x)`634635Перемещает окно так, чтобы его левый верхний угол находился в `(new_y, new_x)`.636637#### `window.nodelay(yes)`638639Если *yes* равно `1`, [`getch()`](https://python-all.ru/3.3/library/curses.html#curses.window.getch) будет неблокирующим.640641#### `window.notimeout(yes)`642643Если *yes* равно `1`, управляющие последовательности не будут подвергаться таймауту.644645Если *yes* равно `0`, через несколько миллисекунд управляющая последовательность не будет интерпретироваться и останется во входном потоке как есть.646647#### `window.noutrefresh()`648649Помечает для обновления, но ждёт. Эта функция обновляет структуру данных, представляющую желаемое состояние окна, но не принуждает к обновлению физического экрана. Для этого вызовите [`doupdate()`](https://python-all.ru/3.3/library/curses.html#curses.doupdate).650651#### `window.overlay(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])`652653Наложить окно поверх *destwin*. Окна необязательно должны быть одного размера – копируется только область пересечения. Это копирование неразрушающее, то есть текущий символ фона не перезаписывает старое содержимое *destwin*.654655Для точного контроля над копируемой областью можно использовать вторую форму [`overlay()`](https://python-all.ru/3.3/library/curses.html#curses.window.overlay). *sminrow* и *smincol* – это координаты левого верхнего угла исходного окна, а остальные переменные задают прямоугольник в целевом окне.656657#### `window.overwrite(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])`658659Перезаписать окно поверх *destwin*. Окна необязательно должны быть одного размера – в этом случае копируется только область пересечения. Это копирование разрушающее, то есть текущий символ фона перезаписывает старое содержимое *destwin*.660661Для точного контроля над копируемой областью можно использовать вторую форму [`overwrite()`](https://python-all.ru/3.3/library/curses.html#curses.window.overwrite). *sminrow* и *smincol* – это координаты левого верхнего угла исходного окна, а остальные переменные задают прямоугольник в целевом окне.662663#### `window.putwin(file)`664665Записывает все данные, связанные с окном, в переданный файловый объект. Эту информацию можно позднее получить с помощью функции [`getwin()`](https://python-all.ru/3.3/library/curses.html#curses.getwin).666667#### `window.redrawln(beg, num)`668669Указывает, что *num* строк экрана, начиная со строки *beg*, повреждены и должны быть полностью перерисованы при следующем вызове [`refresh()`](https://python-all.ru/3.3/library/curses.html#curses.window.refresh).670671#### `window.redrawwin()`672673Помечает всё окно как изменённое, что приводит к его полной перерисовке при следующем вызове [`refresh()`](https://python-all.ru/3.3/library/curses.html#curses.window.refresh).674675#### `window.refresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])`676677Обновить отображение немедленно (синхронизировать фактический экран с предыдущими методами рисования/удаления).6786796 необязательных аргументов можно указывать только когда окно является pad'ом, созданным с помощью [`newpad()`](https://python-all.ru/3.3/library/curses.html#curses.newpad). Дополнительные параметры нужны, чтобы указать, какая часть pad'а и экрана задействована. *pminrow* и *pmincol* задают верхний левый угол прямоугольника, отображаемого в pad'е. *sminrow*, *smincol*, *smaxrow* и *smaxcol* задают границы прямоугольника, отображаемого на экране. Нижний правый угол прямоугольника, отображаемого в pad'е, вычисляется из координат экрана, поскольку прямоугольники должны быть одного размера. Оба прямоугольника должны полностью помещаться в своих структурах. Отрицательные значения *pminrow*, *pmincol*, *sminrow* или *smincol* считаются равными нулю.680681#### `window.resize(nlines, ncols)`682683Перераспределяет память для окна curses, изменяя его размеры в соответствии с указанными значениями. Если хотя бы один из размеров больше текущего, данные окна заполняются пробелами, в которые внесено текущее оформление фона (заданное с помощью [`bkgdset()`](https://python-all.ru/3.3/library/curses.html#curses.window.bkgdset)).684685#### `window.scroll([lines=1])`686687Прокручивает экран или область прокрутки вверх на *lines* строк.688689#### `window.scrollok(flag)`690691Управляет тем, что происходит, когда курсор окна выходит за край окна или области прокрутки, либо в результате перевода строки на последней строке, либо при вводе последнего символа последней строки. Если *flag* равен false, курсор остаётся на последней строке. Если *flag* равен true, окно прокручивается на одну строку вверх. Обратите внимание, что для получения физического эффекта прокрутки на терминале также необходимо вызвать [`idlok()`](https://python-all.ru/3.3/library/curses.html#curses.window.idlok).692693#### `window.setscrreg(top, bottom)`694695Установить область прокрутки от строки *top* до строки *bottom*. Все действия прокрутки будут происходить в этой области.696697#### `window.standend()`698699Выключить атрибут выделения (standout). На некоторых терминалах это имеет побочный эффект выключения всех атрибутов.700701#### `window.standout()`702703Включить атрибут *A\_STANDOUT*.704705#### `window.subpad(begin_y, begin_x)`706707#### `window.subpad(nlines, ncols, begin_y, begin_x)`708709Возвращает подокно, левый верхний угол которого находится в `(begin_y, begin_x)`, а ширина/высота равны *ncols*/*nlines*.710711#### `window.subwin(begin_y, begin_x)`712713#### `window.subwin(nlines, ncols, begin_y, begin_x)`714715Возвращает подокно, левый верхний угол которого находится в `(begin_y, begin_x)`, а ширина/высота равны *ncols*/*nlines*.716717По умолчанию подокно будет простираться от указанной позиции до нижнего правого угла окна.718719#### `window.syncdown()`720721Помечает каждую позицию в окне, которая была помечена в любом из его родительских окон. Эта процедура вызывается функцией [`refresh()`](https://python-all.ru/3.3/library/curses.html#curses.window.refresh), так что почти никогда не требуется вызывать её вручную.722723#### `window.syncok(flag)`724725Если вызвана с *flag*, установленным в `True`, то [`syncup()`](https://python-all.ru/3.3/library/curses.html#curses.window.syncup) вызывается автоматически при каждом изменении в окне.726727#### `window.syncup()`728729Помечает все позиции в родительских окнах данного окна, которые были изменены в окне.730731#### `window.timeout(delay)`732733Устанавливает блокирующее или неблокирующее поведение чтения для окна. Если *delay* отрицателен, используется блокирующее чтение (которое будет ожидать ввода неопределённо долго). Если *delay* равен нулю, используется неблокирующее чтение, и [`getch()`](https://python-all.ru/3.3/library/curses.html#curses.window.getch) вернёт -1, если нет ожидающего ввода. Если *delay* положителен, то [`getch()`](https://python-all.ru/3.3/library/curses.html#curses.window.getch) будет блокироваться на *delay* миллисекунд и вернёт -1, если за это время ввод так и не поступил.734735#### `window.touchline(start, count[, changed])`736737Сообщает, что *count* строк были изменены, начиная со строки *start*. Если передан параметр *changed*, он указывает, помечены ли затронутые строки как изменённые (*changed*=1) или неизменённые (*changed*=0).738739#### `window.touchwin()`740741Считает, что всё окно было изменено, в целях оптимизации отрисовки.742743#### `window.untouchwin()`744745Помечает все строки в окне как неизменённые с момента последнего вызова [`refresh()`](https://python-all.ru/3.3/library/curses.html#curses.window.refresh).746747#### `window.vline(ch, n)`748749#### `window.vline(y, x, ch, n)`750751Отображает вертикальную линию, начинающуюся в `(y, x)`, длиной *n*, состоящую из символа *ch*.752753## 16.11.3. Константы754755Модуль [`curses`](https://python-all.ru/3.3/library/curses.html#module-curses) определяет следующие элементы данных:756757#### `curses.ERR`758759Некоторые процедуры curses, возвращающие целое число, например `getch()`, в случае неудачи возвращают [`ERR`](https://python-all.ru/3.3/library/curses.html#curses.ERR).760761#### `curses.OK`762763Некоторые процедуры curses, возвращающие целое число, например [`napms()`](https://python-all.ru/3.3/library/curses.html#curses.napms), в случае успеха возвращают [`OK`](https://python-all.ru/3.3/library/curses.html#curses.OK).764765#### `curses.version`766767Строка, представляющая текущую версию модуля. Также доступно как `__version__`.768769Доступно несколько констант для задания атрибутов символьных ячеек:770771| Атрибут | Значение |772| --- | --- |773| `A_ALTCHARSET` | Режим альтернативной кодировки знаков. |774| `A_BLINK` | Режим мерцания. |775| `A_BOLD` | Режим полужирного начертания. |776| `A_DIM` | Режим тусклого свечения. |777| `A_NORMAL` | Обычный атрибут. |778| `A_REVERSE` | Обратный (инверсный) режим для цветов фона и текста. |779| `A_STANDOUT` | Режим выделения. |780| `A_UNDERLINE` | Режим подчёркивания. |781782На клавиши ссылаются целочисленные константы с именами, начинающимися с `KEY_`. Точный набор доступных клавиш зависит от системы.783784| Константа клавиши | Клавиша |785| --- | --- |786| `KEY_MIN` | Минимальное значение клавиши |787| `KEY_BREAK` | Клавиша Break (ненадёжно) |788| `KEY_DOWN` | Стрелка вниз |789| `KEY_UP` | Стрелка вверх |790| `KEY_LEFT` | Стрелка влево |791| `KEY_RIGHT` | Стрелка вправо |792| `KEY_HOME` | Клавиша Home (стрелка вверх-влево) |793| `KEY_BACKSPACE` | Backspace (ненадёжно) |794| `KEY_F0` | Функциональные клавиши. Поддерживается до 64 функциональных клавиш. |795| `KEY_Fn` | Значение функциональной клавиши *n* |796| `KEY_DL` | Удалить строку |797| `KEY_IL` | Вставить строку |798| `KEY_DC` | Удалить символ |799| `KEY_IC` | Вставить символ или войти в режим вставки |800| `KEY_EIC` | Выйти из режима вставки символа |801| `KEY_CLEAR` | Очистить экран |802| `KEY_EOS` | Очистить до конца экрана |803| `KEY_EOL` | Очистить до конца строки |804| `KEY_SF` | Прокрутить на 1 строку вперёд |805| `KEY_SR` | Прокрутка на 1 строку назад (обратное направление) |806| `KEY_NPAGE` | Следующая страница |807| `KEY_PPAGE` | Предыдущая страница |808| `KEY_STAB` | Установить табуляцию |809| `KEY_CTAB` | Очистить табуляцию |810| `KEY_CATAB` | Очистить все табуляции |811| `KEY_ENTER` | Ввод или отправка (ненадёжно) |812| `KEY_SRESET` | Мягкий (частичный) сброс (ненадёжно) |813| `KEY_RESET` | Сброс или жёсткий сброс (ненадёжно) |814| `KEY_PRINT` | Печать |815| `KEY_LL` | Домой вниз или нижняя строка (левый нижний) |816| `KEY_A1` | Верхний левый угол клавиатуры |817| `KEY_A3` | Верхний правый угол клавиатуры |818| `KEY_B2` | Центр клавиатуры |819| `KEY_C1` | Нижний левый угол клавиатуры |820| `KEY_C3` | Нижний правый угол клавиатуры |821| `KEY_BTAB` | Обратная табуляция |822| `KEY_BEG` | Начало |823| `KEY_CANCEL` | Отмена |824| `KEY_CLOSE` | Закрыть |825| `KEY_COMMAND` | Команда |826| `KEY_COPY` | Копировать |827| `KEY_CREATE` | Создать |828| `KEY_END` | Конец |829| `KEY_EXIT` | Выход |830| `KEY_FIND` | Найти |831| `KEY_HELP` | Помощь |832| `KEY_MARK` | Отметка |833| `KEY_MESSAGE` | Сообщение |834| `KEY_MOVE` | Переместить |835| `KEY_NEXT` | Далее |836| `KEY_OPEN` | Открыть |837| `KEY_OPTIONS` | Параметры |838| `KEY_PREVIOUS` | Назад (предыдущий) |839| `KEY_REDO` | Повторить |840| `KEY_REFERENCE` | Справка (ссылка) |841| `KEY_REFRESH` | Обновить |842| `KEY_REPLACE` | Заменить |843| `KEY_RESTART` | Перезапустить |844| `KEY_RESUME` | Возобновить |845| `KEY_SAVE` | Сохранить |846| `KEY_SBEG` | Shift+Начало (начало) |847| `KEY_SCANCEL` | Shift+Отмена |848| `KEY_SCOMMAND` | Shift+Команда |849| `KEY_SCOPY` | Shift+Копировать |850| `KEY_SCREATE` | Shift+Создать |851| `KEY_SDC` | Shift+Удалить символ |852| `KEY_SDL` | Shift+Удалить строку |853| `KEY_SELECT` | Выбор |854| `KEY_SEND` | Shift+Конец |855| `KEY_SEOL` | Shift+Очистка строки |856| `KEY_SEXIT` | Shifted Dxit |857| `KEY_SFIND` | Shift+Найти |858| `KEY_SHELP` | Shift+Справка |859| `KEY_SHOME` | Shift+Начало |860| `KEY_SIC` | Shift+Ввод |861| `KEY_SLEFT` | Shift+Стрелка влево |862| `KEY_SMESSAGE` | Shift+Сообщение |863| `KEY_SMOVE` | Shift+Перемещение |864| `KEY_SNEXT` | Shift+Далее |865| `KEY_SOPTIONS` | Shift+Параметры |866| `KEY_SPREVIOUS` | Shift+Назад |867| `KEY_SPRINT` | Shift+Печать |868| `KEY_SREDO` | Shift+Повтор |869| `KEY_SREPLACE` | Замена с Shift |870| `KEY_SRIGHT` | Стрелка вправо с Shift |871| `KEY_SRSUME` | Возобновление с Shift |872| `KEY_SSAVE` | Сохранение с Shift |873| `KEY_SSUSPEND` | Приостановка с Shift |874| `KEY_SUNDO` | Отмена с Shift |875| `KEY_SUSPEND` | Приостановить |876| `KEY_UNDO` | Отменить |877| `KEY_MOUSE` | Событие мыши |878| `KEY_RESIZE` | Событие изменения размера терминала |879| `KEY_MAX` | Максимальное значение клавиши |880881На VT100 и их программных эмуляциях, таких как эмуляторы терминала X, обычно доступны по меньшей мере четыре функциональные клавиши (`KEY_F1`, `KEY_F2`, `KEY_F3`, `KEY_F4`), а клавиши со стрелками отображаются на `KEY_UP`, `KEY_DOWN`, `KEY_LEFT` и `KEY_RIGHT` очевидным образом. Если используется клавиатура PC, можно рассчитывать на клавиши со стрелками и двенадцать функциональных клавиш (на старых клавиатурах PC может быть только десять функциональных клавиш); кроме того, стандартными являются следующие сопоставления цифровой клавиатуры:882883| Клавиша | Константа |884| --- | --- |885| `Вставка` | KEY\_IC |886| `Удаление` | KEY\_DC |887| `Home` | KEY\_HOME |888| `End` | KEY\_END |889| `Page Up` | KEY\_NPAGE |890| `Page Down` | KEY\_PPAGE |891892В следующей таблице перечислены символы из альтернативного набора символов. Они унаследованы от терминала VT100 и обычно доступны в программных эмуляциях, таких как X терминалы. Если графический символ недоступен, curses использует грубое приближение в виде печатных символов ASCII.893894> **Примечание**895>896> Доступны только после вызова [`initscr()`](https://python-all.ru/3.3/library/curses.html#curses.initscr).897898| Код ACS | Значение |899| --- | --- |900| `ACS_BBSS` | альтернативное имя для правого верхнего угла |901| `ACS_BLOCK` | сплошной квадратный блок |902| `ACS_BOARD` | доска из квадратов |903| `ACS_BSBS` | альтернативное имя для горизонтальной линии |904| `ACS_BSSB` | альтернативное имя для левого верхнего угла |905| `ACS_BSSS` | альтернативное имя для верхнего тройника |906| `ACS_BTEE` | нижний тройник |907| `ACS_BULLET` | маркер |908| `ACS_CKBOARD` | шахматная доска (точечный узор) |909| `ACS_DARROW` | стрелка вниз |910| `ACS_DEGREE` | символ градуса |911| `ACS_DIAMOND` | ромб |912| `ACS_GEQUAL` | больше или равно |913| `ACS_HLINE` | горизонтальная линия |914| `ACS_LANTERN` | символ фонаря |915| `ACS_LARROW` | стрелка влево |916| `ACS_LEQUAL` | меньше или равно |917| `ACS_LLCORNER` | левый нижний угол |918| `ACS_LRCORNER` | правый нижний угол |919| `ACS_LTEE` | левый тройник |920| `ACS_NEQUAL` | знак не равно |921| `ACS_PI` | буква пи |922| `ACS_PLMINUS` | плюс-минус |923| `ACS_PLUS` | большой плюс |924| `ACS_RARROW` | стрелка вправо |925| `ACS_RTEE` | правый тройник |926| `ACS_S1` | линия развертки 1 |927| `ACS_S3` | линия развертки 3 |928| `ACS_S7` | линия развертки 7 |929| `ACS_S9` | линия развертки 9 |930| `ACS_SBBS` | альтернативное название правого нижнего угла |931| `ACS_SBSB` | другое название вертикальной линии |932| `ACS_SBSS` | альтернативное название правого тройника |933| `ACS_SSBB` | альтернативное название левого нижнего угла |934| `ACS_SSBS` | альтернативное название нижнего тройника |935| `ACS_SSSB` | альтернативное название левого тройника |936| `ACS_SSSS` | альтернативное название перекрестия или большого плюса |937| `ACS_STERLING` | фунт стерлингов |938| `ACS_TTEE` | верхний тройник |939| `ACS_UARROW` | стрелка вверх |940| `ACS_ULCORNER` | левый верхний угол |941| `ACS_URCORNER` | правый верхний угол |942| `ACS_VLINE` | вертикальная линия |943944В следующей таблице перечислены предопределённые цвета:945946| Константа | Цвет |947| --- | --- |948| `COLOR_BLACK` | Чёрный |949| `COLOR_BLUE` | Синий |950| `COLOR_CYAN` | Голубой (светлый сине-зелёный) |951| `COLOR_GREEN` | Зелёный |952| `COLOR_MAGENTA` | Пурпурный (красновато-фиолетовый) |953| `COLOR_RED` | Красный |954| `COLOR_WHITE` | Белый |955| `COLOR_YELLOW` | Жёлтый |956957# 16.12. [`curses.textpad`](https://python-all.ru/3.3/library/curses.html#module-curses.textpad) – Виджет ввода текста для программ curses958959Модуль [`curses.textpad`](https://python-all.ru/3.3/library/curses.html#module-curses.textpad) предоставляет класс [`Textbox`](https://python-all.ru/3.3/library/curses.html#curses.textpad.Textbox), который выполняет базовое редактирование текста в окне curses, поддерживая набор клавиатурных комбинаций, напоминающих комбинации Emacs (а также Netscape Navigator, BBedit 6.x, FrameMaker и многих других программ). Также модуль предоставляет функцию для рисования прямоугольников, полезную для обрамления текстовых полей или других целей.960961Модуль [`curses.textpad`](https://python-all.ru/3.3/library/curses.html#module-curses.textpad) определяет следующую функцию:962963#### `curses.textpad.rectangle(win, uly, ulx, lry, lrx)`964965Рисует прямоугольник. Первый аргумент должен быть оконным объектом; остальные аргументы – координаты относительно этого окна. Второй и третий аргументы – координаты y и x верхнего левого угла прямоугольника; четвёртый и пятый – координаты y и x нижнего правого угла. Прямоугольник рисуется с использованием символов псевдографики VT100/IBM PC на терминалах, которые это поддерживают (включая xterm и большинство других программных эмуляторов терминала). В противном случае он рисуется с помощью символов ASCII: дефисов, вертикальных черт и знаков плюс.966967## 16.12.1. Объекты Textbox968969Можно создать экземпляр объекта [`Textbox`](https://python-all.ru/3.3/library/curses.html#curses.textpad.Textbox) следующим образом:970971#### `class curses.textpad.Textbox(win)`972973Возвращает объект виджета текстового поля. Аргумент *win* должен быть объектом `WindowObject` curses, в котором будет размещено текстовое поле. Курсор редактирования текстового поля изначально находится в верхнем левом углу содержащего окна, с координатами `(0, 0)`. Флаг экземпляра [`stripspaces`](https://python-all.ru/3.3/library/curses.html#curses.textpad.Textbox.stripspaces) изначально включён.974975Объекты [`Textbox`](https://python-all.ru/3.3/library/curses.html#curses.textpad.Textbox) имеют следующие методы:976977#### `edit([validator])`978979Это основная точка входа, обычно используемая. Она принимает нажатия клавиш редактирования до тех пор, пока не будет введена одна из завершающих комбинаций. Если указан *validator*, он должен быть функцией. Эта функция будет вызываться для каждого введённого нажатия клавиши, причём эта клавиша передаётся в качестве параметра; диспетчеризация команд выполняется на основе результата. Данный метод возвращает содержимое окна в виде строки; наличие в ней пробелов зависит от атрибута [`stripspaces`](https://python-all.ru/3.3/library/curses.html#curses.textpad.Textbox.stripspaces).980981#### `do_command(ch)`982983Обрабатывает одно нажатие командной клавиши. Ниже перечислены поддерживаемые специальные нажатия клавиш:984985| Клавиша | Действие |986| --- | --- |987| `Control-A` | Переход к левому краю окна. |988| `Control-B` | Курсор влево, с переносом на предыдущую строку (если применимо). |989| `Control-D` | Удалить символ под курсором. |990| `Control-E` | Перейти к правому краю (stripspaces off) или в конец строки (stripspaces on). |991| `Control-F` | Курсор вправо, с переносом на следующую строку (если применимо). |992| `Control-G` | Завершить, вернув содержимое окна. |993| `Control-H` | Удалить предыдущий символ. |994| `Control-J` | Завершает, если окно имеет 1 строку, в противном случае вставляет новую строку. |995| `Control-K` | Если строка пуста, удалить её, в противном случае очистить до конца строки. |996| `Control-L` | Обновить экран. |997| `Control-N` | Курсор вниз; переместиться на одну строку вниз. |998| `Control-O` | Вставить пустую строку в позиции курсора. |999| `Control-P` | Курсор вверх; переместиться на одну строку вверх. |10001001Операции перемещения не выполняются, если курсор находится у края, где движение невозможно. Там, где это возможно, поддерживаются следующие синонимы:10021003| Константа | Клавиша |1004| --- | --- |1005| `KEY_LEFT` | `Control-B` |1006| `KEY_RIGHT` | `Control-F` |1007| `KEY_UP` | `Control-P` |1008| `KEY_DOWN` | `Control-N` |1009| `KEY_BACKSPACE` | `Control-h` |10101011Все остальные нажатия клавиш обрабатываются как команда вставить указанный символ и переместиться вправо (с переносом строки).10121013#### `gather()`10141015Возвращает содержимое окна в виде строки; наличие в ней пробелов зависит от атрибута [`stripspaces`](https://python-all.ru/3.3/library/curses.html#curses.textpad.Textbox.stripspaces).10161017#### `stripspaces`10181019Этот атрибут является флагом, управляющим интерпретацией пробелов в окне. Когда он включён, конечные пробелы в каждой строке игнорируются; любое перемещение курсора, которое привело бы к его установке на конечный пробел, вместо этого перемещает курсор в конец строки, а конечные пробелы удаляются при сборе содержимого окна.1020