curses.md
1> **Источник:** https://python-all.ru/3.1/library/curses.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 15.8. `curses` – обработка терминалов для символьных дисплеев89*Платформы:* Unix1011Модуль `curses` предоставляет интерфейс к библиотеке curses, де-факто стандарту для переносимой продвинутой обработки терминалов.1213Хотя curses чаще всего используется в среде Unix, существуют версии для DOS, OS/2 и, возможно, других систем. Этот модуль расширения спроектирован так, чтобы соответствовать API ncurses – библиотеки curses с открытым исходным кодом, работающей на Linux и BSD-версиях Unix.1415> **Примечание**16>17> Начиная с версии 5.4 библиотека ncurses решает, как интерпретировать не-ASCII данные, используя функцию `nl_langinfo`. Это означает, что в приложении необходимо вызвать [`locale.setlocale()`](https://python-all.ru/3.1/library/locale.html#locale.setlocale) и кодировать строки Unicode с помощью одной из доступных кодировок системы. В этом примере используется системная кодировка по умолчанию:18>19> ```python20> import locale21> locale.setlocale(locale.LC_ALL, '')22> code = locale.getpreferredencoding()23> ```24>25> Затем *code* используется как кодировка для вызовов [`str.encode()`](https://python-all.ru/3.1/library/stdtypes.html#str.encode).2627> **См. также**28>29> **Модуль [`curses.ascii`](https://python-all.ru/3.1/library/curses.ascii.html#module-curses.ascii)**30>31> Утилиты для работы с ASCII-символами, независимо от настроек локали.32>33> **Модуль [`curses.panel`](https://python-all.ru/3.1/library/curses.panel.html#module-curses.panel)**34>35> Расширение стека панелей, добавляющее глубину окнам curses.36>37> **Модуль `curses.textpad`**38>39> Виджет редактируемого текста для curses с поддержкой привязок, похожих на40>41> **Emacs**42>43> .44>45> **Модуль `curses.wrapper`**46>47> Вспомогательная функция для правильной настройки и сброса терминала при входе и выходе из приложения.48>49> **[*Программирование с curses в Python*](https://python-all.ru/3.1/howto/curses.html#curses-howto)**50>51> Учебный материал по использованию curses с Python, автор Эндрю Кучлинг и Эрик Рэймонд.52>53> Каталог `Demo/curses/` в дистрибутиве исходного кода Python содержит несколько примеров программ, использующих привязки curses, предоставляемые этим модулем.5455## 15.8.1. Функции5657Модуль `curses` определяет следующее исключение:5859#### `exception curses.error`6061Исключение, возникающее, когда функция библиотеки curses возвращает ошибку.6263> **Примечание**64>65> Если аргументы *x* или *y* функции или метода необязательны, они по умолчанию равны текущему положению курсора. Если *attr* необязателен, он по умолчанию равен `A_NORMAL`.6667Модуль `curses` определяет следующие функции:6869#### `curses.baudrate()`7071Возвращает скорость вывода терминала в битах в секунду. На программных эмуляторах терминала она будет иметь фиксированное высокое значение. Включено по историческим причинам; в прошлом использовалось для написания циклов вывода с временными задержками и иногда для изменения интерфейсов в зависимости от скорости линии.7273#### `curses.beep()`7475Издаёт короткий звуковой сигнал.7677#### `curses.can_change_color()`7879Возвращает true или false в зависимости от того, может ли программист изменять цвета, отображаемые терминалом.8081#### `curses.cbreak()`8283Включает режим cbreak. В режиме cbreak (иногда называемом режимом «rare») обычная построчная буферизация tty отключается и символы становятся доступными для посимвольного чтения. Однако, в отличие от raw-режима, специальные символы (прерывание, завершение, приостановка и управление потоком) сохраняют своё действие на драйвер tty и вызывающую программу. Вызов сначала8485[`raw()`](https://python-all.ru/3.1/library/curses.html#curses.raw)8687, а затем8889[`cbreak()`](https://python-all.ru/3.1/library/curses.html#curses.cbreak)9091оставляет терминал в режиме cbreak.9293#### `curses.color_content(color_number)`9495Возвращает интенсивность красного, зелёного и синего (RGB) компонентов цвета9697*color\_number*9899, который должен находиться в диапазоне от100101`0`102103до104105`COLORS`106107. Возвращается кортеж из трёх элементов, содержащий значения R, G, B для указанного цвета, которые будут находиться в диапазоне от108109`0`110111(нет компонента) до112113`1000`114115(максимальное значение компонента).116117#### `curses.color_pair(color_number)`118119Возвращает значение атрибута для отображения текста указанным цветом. Это значение атрибута можно комбинировать с120121`A_STANDOUT`122123,124125`A_REVERSE`126127и другими атрибутами128129`A_*`130131.132133[`pair_number()`](https://python-all.ru/3.1/library/curses.html#curses.pair_number)134135является аналогом этой функции.136137#### `curses.curs_set(visibility)`138139Устанавливает состояние курсора.140141*visibility*142143может быть установлен в 0, 1 или 2 для невидимого, нормального или очень видимого режима. Если терминал поддерживает запрошенную видимость, возвращается предыдущее состояние курсора; в противном случае возникает исключение. На многих терминалах режим «visible» – это подчёркнутый курсор, а режим «very visible» – блочный курсор.144145#### `curses.def_prog_mode()`146147Сохраняет текущий режим терминала как «программный» режим – режим, когда работающая программа использует curses. (Его аналог – «режим оболочки», когда программа не в curses.) Последующие вызовы148149[`reset_prog_mode()`](https://python-all.ru/3.1/library/curses.html#curses.reset_prog_mode)150151восстановят этот режим.152153#### `curses.def_shell_mode()`154155Сохраняет текущий режим терминала как «режим оболочки» – режим, когда работающая программа не использует curses. (Его аналог – «программный» режим, когда программа использует возможности curses.) Последующие вызовы156157[`reset_shell_mode()`](https://python-all.ru/3.1/library/curses.html#curses.reset_shell_mode)158159восстановят этот режим.160161#### `curses.delay_output(ms)`162163Вставляет паузу в164165*ms*166167миллисекунд в выводе.168169#### `curses.doupdate()`170171Обновляет физический экран. Библиотека curses хранит две структуры данных: одна представляет текущее содержимое физического экрана, а виртуальный экран – желаемое следующее состояние. Функция [`doupdate()`](https://python-all.ru/3.1/library/curses.html#curses.doupdate) обновляет физический экран, чтобы он соответствовал виртуальному.172173Виртуальный экран можно обновить вызовом `noutrefresh()` после выполнения операций записи, таких как `addstr()`, над окном. Обычный вызов `refresh()` – это просто `noutrefresh()`, за которым следует [`doupdate()`](https://python-all.ru/3.1/library/curses.html#curses.doupdate); если нужно обновить несколько окон, можно ускорить работу и, возможно, уменьшить мерцание экрана, выполнив вызовы `noutrefresh()` для всех окон, а затем один вызов [`doupdate()`](https://python-all.ru/3.1/library/curses.html#curses.doupdate).174175#### `curses.echo()`176177Включает режим эхоповтора. В режиме эхоповтора каждый введённый символ отображается на экране по мере ввода.178179#### `curses.endwin()`180181Деинициализирует библиотеку и возвращает терминал в обычное состояние.182183#### `curses.erasechar()`184185Возвращает текущий символ стирания пользователя. В операционных системах Unix это свойство управляющего tty программы curses и не устанавливается самой библиотекой curses.186187#### `curses.filter()`188189Процедура190191[`filter()`](https://python-all.ru/3.1/library/curses.html#curses.filter)192193, если используется, должна вызываться до вызова194195[`initscr()`](https://python-all.ru/3.1/library/curses.html#curses.initscr)196197. В результате этих вызовов LINES устанавливается в 1; возможности clear, cup, cud, cud1, cuu1, cuu, vpa отключаются; строка home устанавливается в значение cr. В результате курсор и обновления экрана ограничиваются текущей строкой. Это может использоваться для посимвольного редактирования строки, не затрагивая остальную часть экрана.198199#### `curses.flash()`200201Мигает экраном. То есть переключает его в инверсный режим, а затем обратно через короткий интервал. Некоторые люди предпочитают такой «видимый звонок» звуковому сигналу внимания, который воспроизводит202203[`beep()`](https://python-all.ru/3.1/library/curses.html#curses.beep)204205.206207#### `curses.flushinp()`208209Очищает все входные буферы. Отбрасывает любой упреждающий ввод, который был набран пользователем, но ещё не обработан программой.210211#### `curses.getmouse()`212213После того как214215`getch()`216217возвращает218219`KEY_MOUSE`220221в качестве сигнала о событии мыши, следует вызвать этот метод для получения поставленного в очередь события мыши, представленного в виде кортежа из 5 элементов222223`(id, x, y, z, bstate)`224225.226227*id*228229– это идентификатор, используемый для различения нескольких устройств, а230231*x*232233,234235*y*236237,238239*z*240241– координаты события. (242243*z*244245в настоящее время не используется.)246247*bstate*248249– это целочисленное значение, биты которого устанавливаются для указания типа события и представляют собой побитовое ИЛИ одной или нескольких из следующих констант, где250251*n*252253– номер кнопки от 1 до 4:254255`BUTTONn_PRESSED`256257,258259`BUTTONn_RELEASED`260261,262263`BUTTONn_CLICKED`264265,266267`BUTTONn_DOUBLE_CLICKED`268269,270271`BUTTONn_TRIPLE_CLICKED`272273,274275`BUTTON_SHIFT`276277,278279`BUTTON_CTRL`280281,282283`BUTTON_ALT`284285.286287#### `curses.getsyx()`288289Возвращает текущие координаты виртуального курсора экрана по осям y и x. Если leaveok в данный момент равно true, возвращается -1,-1.290291#### `curses.getwin(file)`292293Читает данные окна, сохранённые в файле предыдущим вызовом294295`putwin()`296297. Затем процедура создаёт и инициализирует новое окно с использованием этих данных и возвращает объект нового окна.298299#### `curses.has_colors()`300301Возвращает true, если терминал может отображать цвета; в противном случае возвращает false.302303#### `curses.has_ic()`304305Возвращает true, если терминал поддерживает возможности вставки и удаления символов. Эта функция включена только по историческим причинам, так как все современные программные эмуляторы терминалов обладают такими возможностями.306307#### `curses.has_il()`308309Возвращает true, если терминал поддерживает возможности вставки и удаления строк или может имитировать их с помощью областей прокрутки. Эта функция включена только по историческим причинам, так как все современные программные эмуляторы терминалов обладают такими возможностями.310311#### `curses.has_key(ch)`312313Принимает значение клавиши314315*ch*316317и возвращает true, если текущий тип терминала распознаёт клавишу с таким значением.318319#### `curses.halfdelay(tenths)`320321Используется для режима половинной задержки (half-delay), который похож на режим cbreak в том, что вводимые пользователем символы сразу становятся доступны программе. Однако после блокировки на322323*tenths*324325десятых долей секунды генерируется исключение, если ничего не было введено. Значение326327*tenths*328329должно быть числом от 1 до 255. Используйте330331[`nocbreak()`](https://python-all.ru/3.1/library/curses.html#curses.nocbreak)332333для выхода из режима половинной задержки.334335#### `curses.init_color(color_number, r, g, b)`336337Изменяет определение цвета, принимая номер цвета, который нужно изменить, за которым следуют три значения RGB (количество красного, зелёного и синего компонентов). Значение338339*color\_number*340341должно быть между342343`0`344345и346347`COLORS`348349. Каждое из350351*r*352353,354355*g*356357,358359*b*360361должно быть значением между362363`0`364365и366367`1000`368369. При использовании370371[`init_color()`](https://python-all.ru/3.1/library/curses.html#curses.init_color)372373все вхождения этого цвета на экране немедленно меняются на новое определение. На большинстве терминалов эта функция ничего не делает; она активна, только если374375[`can_change_color()`](https://python-all.ru/3.1/library/curses.html#curses.can_change_color)376377возвращает378379`1`380381.382383#### `curses.init_pair(pair_number, fg, bg)`384385Изменяет определение цветовой пары. Принимает три аргумента: номер изменяемой цветовой пары, номер цвета переднего плана и номер цвета фона. Значение386387*pair\_number*388389должно быть между390391`1`392393и394395`COLOR_PAIRS - 1`396397(цветовая пара398399`0`400401жёстко задана как белый на чёрном и не может быть изменена). Значения аргументов402403*fg*404405и406407*bg*408409должны быть между410411`0`412413и414415`COLORS`416417. Если цветовая пара была ранее инициализирована, экран обновляется и все вхождения этой цветовой пары меняются на новое определение.418419#### `curses.initscr()`420421Инициализирует библиотеку. Возвращает `WindowObject`, представляющий весь экран.422423> **Примечание**424>425> Если при открытии терминала возникает ошибка, базовая библиотека curses может вызвать завершение интерпретатора.426427#### `curses.isendwin()`428429Возвращает true, если был вызван430431[`endwin()`](https://python-all.ru/3.1/library/curses.html#curses.endwin)432433(то есть библиотека curses была деинициализирована).434435#### `curses.keyname(k)`436437Возвращает имя клавиши с номером438439*k*440441. Имя клавиши, генерирующей печатный символ ASCII, совпадает с этим символом. Имя управляющей комбинации клавиш – это строка из двух символов: знак ^, за которым следует соответствующий печатный символ ASCII. Имя комбинации с клавишей Alt (128–255) – это строка с префиксом «M-», за которым следует имя соответствующего символа ASCII.442443#### `curses.killchar()`444445Возвращает текущий символ удаления строки пользователя. В операционных системах Unix это свойство управляющего tty программы curses и не устанавливается самой библиотекой curses.446447#### `curses.longname()`448449Возвращает строку, содержащую длинное название terminfo, описывающее текущий терминал. Максимальная длина подробного описания – 128 символов. Она определена только после вызова450451[`initscr()`](https://python-all.ru/3.1/library/curses.html#curses.initscr)452453.454455#### `curses.meta(yes)`456457Если458459*yes*460461равно 1, разрешает ввод 8-битных символов. Если462463*yes*464465равно 0, разрешает только 7-битные символы.466467#### `curses.mouseinterval(interval)`468469Устанавливает максимальное время в миллисекундах, которое может пройти между нажатием и отпусканием, чтобы событие было распознано как щелчок, и возвращает предыдущее значение интервала. Значение по умолчанию – 200 мс, или одна пятая секунды.470471#### `curses.mousemask(mousemask)`472473Устанавливает, какие события мыши должны сообщаться, и возвращает кортеж474475`(availmask, oldmask)`476477.478479*availmask*480481указывает, какие из заданных событий мыши могут быть зарегистрированы; при полном сбое возвращает 0.482483*oldmask*484485– предыдущее значение маски событий мыши данного окна. Если эта функция ни разу не вызывалась, никакие события мыши не сообщаются.486487#### `curses.napms(ms)`488489Приостанавливает выполнение на490491*ms*492493миллисекунд.494495#### `curses.newpad(nlines, ncols)`496497Создаёт и возвращает указатель на новую структуру данных pad с заданным количеством строк и столбцов. Pad возвращается как объект окна.498499Pad подобен окну, за исключением того, что он не ограничен размером экрана и не обязательно связан с определённой частью экрана. Pad можно использовать, когда требуется большое окно, а на экране одновременно отображается только его часть. Автоматического обновления pad (например, при прокрутке или эхо-выводе ввода) не происходит. Методы `refresh()` и `noutrefresh()` pad требуют 6 аргументов для указания отображаемой части pad и места на экране для отображения. Аргументы: pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol; аргументы p относятся к верхнему левому углу отображаемой области pad, а аргументы s определяют область отсечения на экране, в которой должна быть отображена область pad.500501#### `curses.newwin([nlines, ncols], begin_y, begin_x)`502503Возвращает новое окно, левый верхний угол которого находится в `(begin_y, begin_x)`, а его высота/ширина равна *nlines*/*ncols*.504505По умолчанию окно будет расширяться от указанной позиции до нижнего правого угла экрана.506507#### `curses.nl()`508509Включает режим перевода строки. В этом режиме клавиша возврата каретки преобразуется в перевод строки при вводе, а перевод строки преобразуется в возврат каретки и перевод строки при выводе. Режим перевода строки изначально включен.510511#### `curses.nocbreak()`512513Выходит из режима cbreak. Возвращается к обычному «cooked»-режиму с буферизацией строк.514515#### `curses.noecho()`516517Выходит из режима эхопечати. Эхо-вывод вводимых символов отключается.518519#### `curses.nonl()`520521Выходит из режима новой строки. Отключает преобразование возврата каретки в новую строку при вводе и oтключает низкоуровневое преобразование новой строки в новую строку/возврат каретки при выводе (но это не меняет поведение522523`addch('\n')`524525, которая всегда выполняет eквивалент возврата каретки и перевода строки на виртуальном экране). При отключённом преобразовании curses иногда может немного ускорить вертикальное перемещение; кроме того, он сможет обнаруживать нажатие клавиши возврата каретки при вводе.526527#### `curses.noqiflush()`528529При использовании функции noqiflush обычная очистка очередей ввода и вывода, связанных с символами INTR, QUIT и SUSP, не выполняется. Возможно, стоит вызвать530531[`noqiflush()`](https://python-all.ru/3.1/library/curses.html#curses.noqiflush)532533в обработчике сигнала, если нужно, чтобы вывод продолжался так, как будто прерывания не было, после выхода из обработчика.534535#### `curses.noraw()`536537Выходит из режима raw. Возвращается к обычному «cooked»-режиму с буферизацией строк.538539#### `curses.pair_content(pair_number)`540541Возвращает кортеж542543`(fg, bg)`544545, содержащий цвета для запрошенной цветовой пары. Значение546547*pair\_number*548549должно быть между550551`1`552553и554555`COLOR_PAIRS - 1`556557.558559#### `curses.pair_number(attr)`560561Возвращает номер цветовой пары, заданной значением атрибута562563*attr*564565.566567[`color_pair()`](https://python-all.ru/3.1/library/curses.html#curses.color_pair)568569является аналогом этой функции.570571#### `curses.putp(string)`572573Эквивалент574575`tputs(str, 1, putchar)`576577; выводит значение указанной возможности terminfo для текущего терминала. Обратите внимание, что вывод putp всегда направляется в стандартный вывод.578579#### `curses.qiflush([flag])`580581Если582583*flag*584585равен false, эффект будет таким же, как при вызове586587[`noqiflush()`](https://python-all.ru/3.1/library/curses.html#curses.noqiflush)588589. Если590591*flag*592593равен true или аргумент не указан, очереди будут очищены при чтении этих управляющих символов.594595#### `curses.raw()`596597Переход в необработанный режим. В необработанном режиме отключаются обычная буферизация строк и обработка клавиш прерывания, выхода, приостановки и управления потоком; символы передаются функциям ввода curses по одному.598599#### `curses.reset_prog_mode()`600601Восстанавливает терминал в режим «program», как было ранее сохранено с помощью602603[`def_prog_mode()`](https://python-all.ru/3.1/library/curses.html#curses.def_prog_mode)604605.606607#### `curses.reset_shell_mode()`608609Восстанавливает терминал в режим «shell», как было ранее сохранено с помощью610611[`def_shell_mode()`](https://python-all.ru/3.1/library/curses.html#curses.def_shell_mode)612613.614615#### `curses.setsyx(y, x)`616617Устанавливает виртуальный курсор экрана в позицию618619*y*620621,622623*x*624625. Если626627*y*628629и630631*x*632633равны -1, то устанавливается leaveok.634635#### `curses.setupterm([termstr, fd])`636637Инициализирует терминал.638639*termstr*640641– строка с именем терминала; если она опущена, используется значение переменной окружения TERM.642643*fd*644645– это файловый дескриптор, на который будут отправляться любые последовательности инициализации; если он не указан, используется файловый дескриптор для646647`sys.stdout`648649.650651#### `curses.start_color()`652653Должна быть вызвана, если программист хочет использовать цвета, и до вызова любой другой процедуры управления цветом. Рекомендуется вызывать эту процедуру сразу после [`initscr()`](https://python-all.ru/3.1/library/curses.html#curses.initscr).654655[`start_color()`](https://python-all.ru/3.1/library/curses.html#curses.start_color) инициализирует восемь основных цветов (чёрный, красный, зелёный, жёлтый, синий, пурпурный, голубой и белый) и две глобальные переменные в модуле `curses`, `COLORS` и `COLOR_PAIRS`, содержащие максимальное количество цветов и цветовых пар, которые поддерживает терминал. Также восстанавливает цвета на терминале до значений, которые были при его включении.656657#### `curses.termattrs()`658659Возвращает логическое ИЛИ всех видеоатрибутов, поддерживаемых терминалом. Эта информация полезна, когда curses-программа требует полного контроля над внешним видом экрана.660661#### `curses.termname()`662663Возвращает значение переменной окружения TERM, усечённое до 14 символов.664665#### `curses.tigetflag(capname)`666667Возвращает значение логической возможности, соответствующей имени возможности terminfo668669*capname*670671. Значение672673`-1`674675возвращается, если676677*capname*678679не является логической возможностью, или680681`0`682683, если она отменена или отсутствует в описании терминала.684685#### `curses.tigetnum(capname)`686687Возвращает значение числовой возможности, соответствующей имени возможности terminfo688689*capname*690691. Значение692693`-2`694695возвращается, если696697*capname*698699не является числовой возможностью, или700701`-1`702703, если она отменена или отсутствует в описании терминала.704705#### `curses.tigetstr(capname)`706707Возвращает значение строковой возможности, соответствующей имени возможности terminfo708709*capname*710711.712713`None`714715возвращается, если716717*capname*718719не является строковой возможностью, или она отменена или отсутствует в описании терминала.720721#### `curses.tparm(str[, ...])`722723Создаёт экземпляр строки724725*str*726727с переданными параметрами, где728729*str*730731должна быть параметризованной строкой из базы данных terminfo. Например,732733`tparm(tigetstr("cup"), 5, 3)`734735может дать736737`'\033[6;4H'`738739, точный результат зависит от типа терминала.740741#### `curses.typeahead(fd)`742743Указывает, что файловый дескриптор *fd* должен использоваться для проверки упреждающего ввода. Если *fd* равен `-1`, то проверка упреждающего ввода не выполняется.744745Библиотека curses выполняет «оптимизацию прерывания строки» (line-breakout optimization), периодически проверяя упреждающий ввод\\nво время обновления экрана. Если ввод обнаружен и поступает с tty,\\nтекущее обновление откладывается до следующего вызова refresh или doupdate,\\nчто обеспечивает более быстрый ответ на заранее введённые команды. Эта функция\\nпозволяет указать другой файловый дескриптор для проверки упреждающего ввода.746747#### `curses.unctrl(ch)`748749Возвращает строку, являющуюся печатным представлением символа750751*ch*752753. Управляющие символы отображаются как значок вставки (^), за которым следует символ, например754755`^C`756757. Печатные символы остаются без изменений.758759#### `curses.ungetch(ch)`760761Помещает *ch* в очередь, чтобы следующий вызов `getch()` вернул его.762763> **Примечание**764>765> Только один *ch* может быть помещён до вызова `getch()`.766767#### `curses.ungetmouse(id, x, y, z, bstate)`768769Помещает событие770771`KEY_MOUSE`772773во входную очередь, связывая с ним переданные данные состояния.774775#### `curses.use_env(flag)`776777Если используется, эту функцию следует вызывать перед778779[`initscr()`](https://python-all.ru/3.1/library/curses.html#curses.initscr)780781или newterm. Когда782783*flag*784785равен false, используются значения строк и столбцов, указанные в базе данных terminfo, даже если установлены переменные окружения786787**LINES**788789и790791**COLUMNS**792793(используемые по умолчанию), или если curses работает в окне (в этом случае поведение по умолчанию – использовать размер окна, если794795**LINES**796797и798799**COLUMNS**800801не установлены).802803#### `curses.use_default_colors()`804805Разрешает использование значений по умолчанию для цветов на терминалах, поддерживающих эту возможность. Это позволяет поддерживать прозрачность в приложении. Цвет по умолчанию назначается номеру цвета -1. После вызова этой функции806807`init_pair(x, curses.COLOR_RED, -1)`808809инициализирует, например, цветовую пару810811*x*812813с красным цветом переднего плана на фоне по умолчанию.814815## 15.8.2. Объекты окон816817Объекты окон, возвращаемые [`initscr()`](https://python-all.ru/3.1/library/curses.html#curses.initscr) и [`newwin()`](https://python-all.ru/3.1/library/curses.html#curses.newwin) выше, имеют следующие методы:818819#### `window.addch([y, x], ch[, attr])`820821> **Примечание**822>823> Под *символом* здесь понимается C-символ (код ASCII), а не Python-символ (строка длины 1). (Это примечание верно везде, где в документации упоминается символ.) Встроенная функция [`ord()`](https://python-all.ru/3.1/library/functions.html#ord) удобна для преобразования строк в коды.824825Рисует символ *ch* в позиции `(y, x)` с атрибутами *attr*, перезаписывая любой символ, ранее нарисованный в этой позиции. По умолчанию позиция символа и атрибуты берутся из текущих настроек объекта окна.826827#### `window.addnstr([y, x], str, n[, attr])`828829Рисует не более830831*n*832833символов строки834835*str*836837в позиции838839`(y, x)`840841с атрибутами842843*attr*844845, перезаписывая всё, что было на экране ранее.846847#### `window.addstr([y, x], str[, attr])`848849Рисует строку850851*str*852853в позиции854855`(y, x)`856857с атрибутами858859*attr*860861, перезаписывая всё, что было на экране ранее.862863#### `window.attroff(attr)`864865Удаляет атрибут866867*attr*868869из набора «фоновых» атрибутов, применяемых ко всем записям в текущее окно.870871#### `window.attron(attr)`872873Добавить атрибут874875*attr*876877из набора «фоновых» атрибутов, применяемых ко всем записям в текущее окно.878879#### `window.attrset(attr)`880881Устанавливает «фоновый» набор атрибутов в882883*attr*884885. Изначально этот набор равен 0 (нет атрибутов).886887#### `window.bkgd(ch[, attr])`888889Задаёт фоновое свойство окна: символ *ch* с атрибутами *attr*. Затем это изменение применяется ко всем позициям символов в окне:890891- Атрибут каждого символа в окне изменяется на новый фоновый атрибут.892- Везде, где встречается прежний фоновый символ, он заменяется на новый фоновый символ.893894#### `window.bkgdset(ch[, attr])`895896Устанавливает фон окна. Фон окна состоит из символа и любой комбинации атрибутов. Атрибутная часть фона объединяется (по ИЛИ) со всеми непустыми символами, которые записываются в окно. Как символьная, так и атрибутная части фона объединяются с пробелами. Фон становится свойством символа и перемещается вместе с ним при прокрутке и операциях вставки/удаления строк и символов.897898#### `window.border([ls[, rs[, ts[, bs[, tl[, tr[, bl[, br]]]]]]]])`899900Рисует рамку по краям окна. Каждый параметр задаёт символ для определённой части рамки; подробнее см. таблицу ниже. Символы могут быть заданы как целые числа или как строки из одного символа.901902> **Примечание**903>904> Значение `0` для любого параметра приводит к использованию символа по умолчанию для этого параметра. Именованные параметры могут *не* быть использованы. Значения по умолчанию перечислены в этой таблице:905906| Параметр | Описание | Значение по умолчанию |907| --- | --- | --- |908| *ls* | Левая сторона | `ACS_VLINE` |909| *rs* | Правая сторона | `ACS_VLINE` |910| *ts* | Верх | `ACS_HLINE` |911| *bs* | Низ | `ACS_HLINE` |912| *tl* | Верхний левый угол | `ACS_ULCORNER` |913| *tr* | Верхний правый угол | `ACS_URCORNER` |914| *bl* | Нижний левый угол | `ACS_LLCORNER` |915| *br* | Нижний правый угол | `ACS_LRCORNER` |916917#### `window.box([vertch, horch])`918919Подобно920921[`border()`](https://python-all.ru/3.1/library/curses.html#curses.window.border)922923, но оба924925*ls*926927и928929*rs*930931являются932933*vertch*934935, а оба936937*ts*938939и bs являются940941*horch*942943. В этой функции всегда используются символы углов по умолчанию.944945#### `window.chgat([y, x][, num], attr)`946947Устанавливает атрибуты для948949*num*950951символов на текущей позиции курсора или на позиции952953`(y, x)`954955, если она указана. Если значение956957*num*958959не задано или960961*num*962963= -1, атрибут будет установлен для всех символов до конца строки. Эта функция не перемещает курсор. Изменённая строка помечается с помощью метода964965[`touchline()`](https://python-all.ru/3.1/library/curses.html#curses.window.touchline)966967, чтобы её содержимое было перерисовано при следующем обновлении окна.968969#### `window.clear()`970971Подобно972973[`erase()`](https://python-all.ru/3.1/library/curses.html#curses.window.erase)974975, но также приводит к перерисовке всего окна при следующем вызове976977[`refresh()`](https://python-all.ru/3.1/library/curses.html#curses.window.refresh)978979.980981#### `window.clearok(yes)`982983Если984985*yes*986987равно 1, следующий вызов988989[`refresh()`](https://python-all.ru/3.1/library/curses.html#curses.window.refresh)990991полностью очистит окно.992993#### `window.clrtobot()`994995Стирает от курсора до конца окна: все строки ниже курсора удаляются, а затем выполняется действие, эквивалентное996997[`clrtoeol()`](https://python-all.ru/3.1/library/curses.html#curses.window.clrtoeol)998999.10001001#### `window.clrtoeol()`10021003Стирает от курсора до конца строки.10041005#### `window.cursyncup()`10061007Обновляет текущую позицию курсора всех родительских окон, чтобы отражать текущую позицию курсора данного окна.10081009#### `window.delch([y, x])`10101011Удаляет символ на позиции10121013`(y, x)`10141015.10161017#### `window.deleteln()`10181019Удаляет строку под курсором. Все следующие строки сдвигаются на одну строку вверх.10201021#### `window.derwin([nlines, ncols], begin_y, begin_x)`10221023Сокращение от «derive window» (производное окно),10241025[`derwin()`](https://python-all.ru/3.1/library/curses.html#curses.window.derwin)10261027– это то же самое, что вызов10281029[`subwin()`](https://python-all.ru/3.1/library/curses.html#curses.window.subwin)10301031, за исключением того, что10321033*begin\_y*10341035и10361037*begin\_x*10381039задаются относительно начала координат окна, а не относительно всего экрана. Возвращает оконный объект для производного окна.10401041#### `window.echochar(ch[, attr])`10421043Добавляет символ10441045*ch*10461047с атрибутом10481049*attr*10501051и сразу же вызывает10521053[`refresh()`](https://python-all.ru/3.1/library/curses.html#curses.window.refresh)10541055для окна.10561057#### `window.enclose(y, x)`10581059Проверяет, находится ли заданная пара экранных координат символьной ячейки (относительно экрана) внутри заданного окна, возвращает true или false. Это полезно для определения того, какое подмножество окон экрана содержит местоположение события мыши.10601061#### `window.erase()`10621063Очищает окно.10641065#### `window.getbegyx()`10661067Возвращает кортеж10681069`(y, x)`10701071координат верхнего левого угла.10721073#### `window.getch([y, x])`10741075Возвращает символ. Обратите внимание: возвращаемое целое число10761077*не*10781079обязательно должно быть в диапазоне ASCII: функциональные клавиши, клавиши цифровой клавиатуры и тому подобное возвращают числа больше 256. В режиме без задержки возвращается -1, если нет ввода, иначе10801081[`getch()`](https://python-all.ru/3.1/library/curses.html#curses.window.getch)10821083ожидает нажатия клавиши.10841085#### `window.getkey([y, x])`10861087Получает символ, возвращая строку вместо целого числа, как10881089[`getch()`](https://python-all.ru/3.1/library/curses.html#curses.window.getch)10901091делает. Функциональные клавиши, клавиши цифровой клавиатуры и тому подобное возвращают многобайтовую строку, содержащую имя клавиши. В режиме без задержки при отсутствии ввода генерируется исключение.10921093#### `window.getmaxyx()`10941095Возвращает кортеж10961097`(y, x)`10981099высоты и ширины окна.11001101#### `window.getparyx()`11021103Возвращает начальные координаты этого окна относительно его родительского окна в две целочисленные переменные y и x. Возвращает11041105`-1,-1`11061107, если у этого окна нет родителя.11081109#### `window.getstr([y, x])`11101111Читает строку от пользователя, с примитивной возможностью редактирования строки.11121113#### `window.getyx()`11141115Возвращает кортеж11161117`(y, x)`11181119текущей позиции курсора относительно верхнего левого угла окна.11201121#### `window.hline([y, x], ch, n)`11221123Отображает горизонтальную линию, начинающуюся в точке11241125`(y, x)`11261127, длиной11281129*n*11301131, состоящую из символа11321133*ch*11341135.11361137#### `window.idcok(flag)`11381139Если11401141*flag*11421143равен false, curses перестаёт использовать аппаратные возможности вставки/удаления символов терминала; если11441145*flag*11461147равен true, вставка и удаление символов включаются. При первой инициализации curses использование вставки/удаления символов включено по умолчанию.11481149#### `window.idlok(yes)`11501151Если при вызове11521153*yes*11541155равен 1,11561157`curses`11581159попытается использовать аппаратные средства редактирования строк. В противном случае вставка/удаление строк отключаются.11601161#### `window.immedok(flag)`11621163Если11641165*flag*11661167равен true, любое изменение изображения окна автоматически приводит к его обновлению; больше не нужно вызывать11681169[`refresh()`](https://python-all.ru/3.1/library/curses.html#curses.window.refresh)11701171самостоятельно. Однако это может значительно снизить производительность из-за повторных вызовов wrefresh. Эта опция отключена по умолчанию.11721173#### `window.inch([y, x])`11741175Возвращает символ в указанной позиции окна. Младшие 8 бит – это сам символ, а старшие биты – атрибуты.11761177#### `window.insch([y, x], ch[, attr])`11781179Рисует символ11801181*ch*11821183в точке11841185`(y, x)`11861187с атрибутами11881189*attr*11901191, сдвигая строку от позиции11921193*x*11941195вправо на один символ.11961197#### `window.insdelln(nlines)`11981199Вставляет12001201*nlines*12021203строк в указанное окно над текущей строкой.12041205*nlines*12061207нижних строк теряются. Для отрицательного12081209*nlines*12101211удаляет12121213*nlines*12141215строк, начиная с той, что под курсором, и сдвигает оставшиеся строки вверх.12161217*nlines*12181219нижних строк очищаются. Текущая позиция курсора остаётся прежней.12201221#### `window.insertln()`12221223Вставляет пустую строку под курсором. Все последующие строки сдвигаются вниз на 1 строку.12241225#### `window.insnstr([y, x], str, n[, attr])`12261227Вставляет строку символов (столько символов, сколько помещается на строке) перед символом под курсором, до12281229*n*12301231символов. Если12321233*n*12341235равно нулю или отрицательно, вставляется вся строка. Все символы справа от курсора сдвигаются вправо, при этом крайние правые символы строки теряются. Позиция курсора не меняется (после перемещения в12361237*y*12381239,12401241*x*12421243, если указано).12441245#### `window.insstr([y, x], str[, attr])`12461247Вставляет строку символов (столько символов, сколько помещается на строке) перед символом под курсором. Все символы справа от курсора сдвигаются вправо, при этом крайние правые символы строки теряются. Позиция курсора не меняется (после перемещения в12481249*y*12501251,12521253*x*12541255, если указано).12561257#### `window.instr([y, x][, n])`12581259Возвращает строку символов, извлечённую из окна, начиная с текущей позиции курсора или с12601261*y*12621263,12641265*x*12661267, если они указаны. Атрибуты из символов удаляются. Если указан12681269*n*12701271,12721273[`instr()`](https://python-all.ru/3.1/library/curses.html#curses.window.instr)12741275возвращает строку длиной не более12761277*n*12781279символов (без учёта завершающего NUL).12801281#### `window.is_linetouched(line)`12821283Возвращает true, если указанная строка была изменена после последнего вызова12841285[`refresh()`](https://python-all.ru/3.1/library/curses.html#curses.window.refresh)12861287; иначе возвращает false. Возбуждает исключение12881289[`curses.error`](https://python-all.ru/3.1/library/curses.html#curses.error)12901291, если12921293*line*12941295недопустима для данного окна.12961297#### `window.is_wintouched()`12981299Возвращает true, если указанное окно было изменено после последнего вызова13001301[`refresh()`](https://python-all.ru/3.1/library/curses.html#curses.window.refresh)13021303; иначе возвращает false.13041305#### `window.keypad(yes)`13061307Если13081309*yes*13101311равно 1, escape-последовательности, генерируемые некоторыми клавишами (цифровая клавиатура, функциональные клавиши), будут интерпретироваться модулем13121313`curses`13141315. Если13161317*yes*13181319равно 0, escape-последовательности останутся как есть во входном потоке.13201321#### `window.leaveok(yes)`13221323Если *yes* равно 1, курсор остаётся на месте при обновлении, а не перемещается в «позицию курсора». Это уменьшает перемещение курсора, где это возможно. Если возможно, курсор будет сделан невидимым.13241325Если *yes* равно 0, курсор всегда будет находиться в «позиции курсора» после обновления.13261327#### `window.move(new_y, new_x)`13281329Перемещает курсор в13301331`(new_y, new_x)`13321333.13341335#### `window.mvderwin(y, x)`13361337Перемещает окно внутри его родительского окна. Экранно-зависимые параметры окна не изменяются. Эта процедура используется для отображения разных частей родительского окна на одной и той же физической позиции на экране.13381339#### `window.mvwin(new_y, new_x)`13401341Перемещает окно так, чтобы его левый верхний угол находился в13421343`(new_y, new_x)`13441345.13461347#### `window.nodelay(yes)`13481349Если13501351*yes*13521353равно13541355`1`13561357,13581359[`getch()`](https://python-all.ru/3.1/library/curses.html#curses.window.getch)13601361будет неблокирующим.13621363#### `window.notimeout(yes)`13641365Если *yes* равно `1`, управляющие последовательности не будут подвергаться таймауту.13661367Если *yes* равно `0`, через несколько миллисекунд управляющая последовательность не будет интерпретироваться и останется во входном потоке как есть.13681369#### `window.noutrefresh()`13701371Помечает для обновления, но ждёт. Эта функция обновляет структуру данных, представляющую желаемое состояние окна, но не принуждает к обновлению физического экрана. Для этого вызовите13721373[`doupdate()`](https://python-all.ru/3.1/library/curses.html#curses.doupdate)13741375.13761377#### `window.overlay(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])`13781379Наложить окно поверх *destwin*. Окна необязательно должны быть одного размера – копируется только область пересечения. Это копирование неразрушающее, то есть текущий символ фона не перезаписывает старое содержимое *destwin*.13801381Для точного контроля над копируемой областью можно использовать вторую форму [`overlay()`](https://python-all.ru/3.1/library/curses.html#curses.window.overlay). *sminrow* и *smincol* – это координаты левого верхнего угла исходного окна, а остальные переменные задают прямоугольник в целевом окне.13821383#### `window.overwrite(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])`13841385Перезаписать окно поверх *destwin*. Окна необязательно должны быть одного размера – в этом случае копируется только область пересечения. Это копирование разрушающее, то есть текущий символ фона перезаписывает старое содержимое *destwin*.13861387Для точного контроля над копируемой областью можно использовать вторую форму [`overwrite()`](https://python-all.ru/3.1/library/curses.html#curses.window.overwrite). *sminrow* и *smincol* – это координаты левого верхнего угла исходного окна, а остальные переменные задают прямоугольник в целевом окне.13881389#### `window.putwin(file)`13901391Записывает все данные, связанные с окном, в переданный файловый объект. Эти данные можно позже извлечь с помощью функции13921393[`getwin()`](https://python-all.ru/3.1/library/curses.html#curses.getwin)13941395.13961397#### `window.redrawln(beg, num)`13981399Указывает, что14001401*num*14021403строк экрана, начиная со строки14041405*beg*14061407, повреждены и должны быть полностью перерисованы при следующем вызове14081409[`refresh()`](https://python-all.ru/3.1/library/curses.html#curses.window.refresh)14101411.14121413#### `window.redrawwin()`14141415Помечает все окно как изменённое, что приводит к его полной перерисовке при следующем вызове14161417[`refresh()`](https://python-all.ru/3.1/library/curses.html#curses.window.refresh)14181419.14201421#### `window.refresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])`14221423Обновить отображение немедленно (синхронизировать фактический экран с предыдущими методами рисования/удаления).142414256 необязательных аргументов можно указывать только когда окно является pad'ом, созданным с помощью [`newpad()`](https://python-all.ru/3.1/library/curses.html#curses.newpad). Дополнительные параметры нужны, чтобы указать, какая часть pad'а и экрана задействована. *pminrow* и *pmincol* задают верхний левый угол прямоугольника, отображаемого в pad'е. *sminrow*, *smincol*, *smaxrow* и *smaxcol* задают границы прямоугольника, отображаемого на экране. Нижний правый угол прямоугольника, отображаемого в pad'е, вычисляется из координат экрана, поскольку прямоугольники должны быть одного размера. Оба прямоугольника должны полностью помещаться в своих структурах. Отрицательные значения *pminrow*, *pmincol*, *sminrow* или *smincol* считаются равными нулю.14261427#### `window.scroll([lines=1])`14281429Прокручивает экран или область прокрутки вверх на14301431*lines*14321433строк.14341435#### `window.scrollok(flag)`14361437Управляет поведением при перемещении курсора окна за край окна или области прокрутки, будь то из-за перевода строки на нижней строке или ввода последнего символа последней строки. Если14381439*flag*14401441равен false, курсор остаётся на нижней строке. Если14421443*flag*14441445равен true, окно прокручивается на одну строку вверх. Обратите внимание, что для получения физического эффекта прокрутки на терминале также необходимо вызвать14461447[`idlok()`](https://python-all.ru/3.1/library/curses.html#curses.window.idlok)14481449.14501451#### `window.setscrreg(top, bottom)`14521453Установить область прокрутки от строки14541455*top*14561457до строки14581459*bottom*14601461. Все действия прокрутки будут происходить в этой области.14621463#### `window.standend()`14641465Выключить атрибут выделения (standout). На некоторых терминалах это имеет побочный эффект выключения всех атрибутов.14661467#### `window.standout()`14681469Включить атрибут14701471*A\_STANDOUT*14721473.14741475#### `window.subpad([nlines, ncols], begin_y, begin_x)`14761477Возвращает подокно, левый верхний угол которого находится в14781479`(begin_y, begin_x)`14801481, а ширина/высота равны14821483*ncols*14841485/14861487*nlines*14881489.14901491#### `window.subwin([nlines, ncols], begin_y, begin_x)`14921493Возвращает подокно, левый верхний угол которого находится в `(begin_y, begin_x)`, а ширина/высота равны *ncols*/*nlines*.14941495По умолчанию подокно будет простираться от указанной позиции до нижнего правого угла окна.14961497#### `window.syncdown()`14981499Помечает каждую позицию в окне, которая была помечена в любом из его родительских окон. Эта процедура вызывается функцией15001501[`refresh()`](https://python-all.ru/3.1/library/curses.html#curses.window.refresh)15021503, поэтому практически никогда не требуется вызывать её вручную.15041505#### `window.syncok(flag)`15061507Если вызвана с15081509*flag*15101511, установленным в true, то15121513[`syncup()`](https://python-all.ru/3.1/library/curses.html#curses.window.syncup)15141515вызывается автоматически при каждом изменении в окне.15161517#### `window.syncup()`15181519Отмечает все позиции в предках окна, которые были изменены в этом окне.15201521#### `window.timeout(delay)`15221523Устанавливает блокирующее или неблокирующее чтение для окна. Если15241525*delay*15261527отрицательный, используется блокирующее чтение (оно будет ждать ввода неограниченно долго). Если15281529*delay*15301531равен нулю, используется неблокирующее чтение, и15321533[`getch()`](https://python-all.ru/3.1/library/curses.html#curses.window.getch)15341535вернёт -1, если ввода нет. Если15361537*delay*15381539положительный, то15401541[`getch()`](https://python-all.ru/3.1/library/curses.html#curses.window.getch)15421543будет блокировать выполнение на15441545*delay*15461547миллисекунд и вернёт -1, если по истечении этого времени ввод всё ещё отсутствует.15481549#### `window.touchline(start, count[, changed])`15501551Сообщает, что15521553*count*15541555строк были изменены, начиная со строки15561557*start*15581559. Если передан параметр15601561*changed*15621563, он указывает, помечены ли затронутые строки как изменённые (15641565*changed*15661567=1) или неизменённые (15681569*changed*15701571=0).15721573#### `window.touchwin()`15741575Считает, что всё окно было изменено, в целях оптимизации отрисовки.15761577#### `window.untouchwin()`15781579Помечает все строки в окне как неизменённые после последнего вызова15801581[`refresh()`](https://python-all.ru/3.1/library/curses.html#curses.window.refresh)15821583.15841585#### `window.vline([y, x], ch, n)`15861587Отображает вертикальную линию, начинающуюся в15881589`(y, x)`15901591, длиной15921593*n*15941595, состоящую из символа15961597*ch*15981599.16001601## 15.8.3. Константы16021603Модуль `curses` определяет следующие элементы данных:16041605#### `curses.ERR`16061607Некоторые процедуры curses, возвращающие целое число, например16081609`getch()`16101611, в случае неудачи возвращают16121613[`ERR`](https://python-all.ru/3.1/library/curses.html#curses.ERR)16141615.16161617#### `curses.OK`16181619Некоторые процедуры curses, возвращающие целое число, например16201621[`napms()`](https://python-all.ru/3.1/library/curses.html#curses.napms)16221623, в случае успеха возвращают16241625[`OK`](https://python-all.ru/3.1/library/curses.html#curses.OK)16261627.16281629#### `curses.version`16301631Строка, представляющая текущую версию модуля. Также доступно как16321633`__version__`16341635.16361637Доступно несколько констант для задания атрибутов символьных ячеек:16381639| Атрибут | Значение |1640| --- | --- |1641| `A_ALTCHARSET` | Режим альтернативной кодировки знаков. |1642| `A_BLINK` | Режим мерцания. |1643| `A_BOLD` | Режим полужирного начертания. |1644| `A_DIM` | Режим тусклого свечения. |1645| `A_NORMAL` | Обычный атрибут. |1646| `A_REVERSE` | Обратный (инверсный) режим для цветов фона и текста. |1647| `A_STANDOUT` | Режим выделения. |1648| `A_UNDERLINE` | Режим подчёркивания. |16491650На клавиши ссылаются целочисленные константы с именами, начинающимися с `KEY_`. Точный набор доступных клавиш зависит от системы.16511652| Константа клавиши | Клавиша |1653| --- | --- |1654| `KEY_MIN` | Минимальное значение клавиши |1655| `KEY_BREAK` | Клавиша Break (ненадёжно) |1656| `KEY_DOWN` | Стрелка вниз |1657| `KEY_UP` | Стрелка вверх |1658| `KEY_LEFT` | Стрелка влево |1659| `KEY_RIGHT` | Стрелка вправо |1660| `KEY_HOME` | Клавиша Home (стрелка вверх-влево) |1661| `KEY_BACKSPACE` | Backspace (ненадёжно) |1662| `KEY_F0` | Функциональные клавиши. Поддерживается до 64 функциональных клавиш. |1663| `KEY_Fn` | Значение функциональной клавиши *n* |1664| `KEY_DL` | Удалить строку |1665| `KEY_IL` | Вставить строку |1666| `KEY_DC` | Удалить символ |1667| `KEY_IC` | Вставить символ или войти в режим вставки |1668| `KEY_EIC` | Выйти из режима вставки символа |1669| `KEY_CLEAR` | Очистить экран |1670| `KEY_EOS` | Очистить до конца экрана |1671| `KEY_EOL` | Очистить до конца строки |1672| `KEY_SF` | Прокрутить на 1 строку вперёд |1673| `KEY_SR` | Прокрутка на 1 строку назад (обратное направление) |1674| `KEY_NPAGE` | Следующая страница |1675| `KEY_PPAGE` | Предыдущая страница |1676| `KEY_STAB` | Установить табуляцию |1677| `KEY_CTAB` | Очистить табуляцию |1678| `KEY_CATAB` | Очистить все табуляции |1679| `KEY_ENTER` | Ввод или отправка (ненадёжно) |1680| `KEY_SRESET` | Мягкий (частичный) сброс (ненадёжно) |1681| `KEY_RESET` | Сброс или жёсткий сброс (ненадёжно) |1682| `KEY_PRINT` | Печать |1683| `KEY_LL` | Домой вниз или нижняя строка (левый нижний) |1684| `KEY_A1` | Верхний левый угол клавиатуры |1685| `KEY_A3` | Верхний правый угол клавиатуры |1686| `KEY_B2` | Центр клавиатуры |1687| `KEY_C1` | Нижний левый угол клавиатуры |1688| `KEY_C3` | Нижний правый угол клавиатуры |1689| `KEY_BTAB` | Обратная табуляция |1690| `KEY_BEG` | Начало |1691| `KEY_CANCEL` | Отмена |1692| `KEY_CLOSE` | Закрыть |1693| `KEY_COMMAND` | Команда |1694| `KEY_COPY` | Копировать |1695| `KEY_CREATE` | Создать |1696| `KEY_END` | Конец |1697| `KEY_EXIT` | Выход |1698| `KEY_FIND` | Найти |1699| `KEY_HELP` | Помощь |1700| `KEY_MARK` | Отметка |1701| `KEY_MESSAGE` | Сообщение |1702| `KEY_MOVE` | Переместить |1703| `KEY_NEXT` | Далее |1704| `KEY_OPEN` | Открыть |1705| `KEY_OPTIONS` | Параметры |1706| `KEY_PREVIOUS` | Назад (предыдущий) |1707| `KEY_REDO` | Повторить |1708| `KEY_REFERENCE` | Справка (ссылка) |1709| `KEY_REFRESH` | Обновить |1710| `KEY_REPLACE` | Заменить |1711| `KEY_RESTART` | Перезапустить |1712| `KEY_RESUME` | Возобновить |1713| `KEY_SAVE` | Сохранить |1714| `KEY_SBEG` | Shift+Начало (начало) |1715| `KEY_SCANCEL` | Shift+Отмена |1716| `KEY_SCOMMAND` | Shift+Команда |1717| `KEY_SCOPY` | Shift+Копировать |1718| `KEY_SCREATE` | Shift+Создать |1719| `KEY_SDC` | Shift+Удалить символ |1720| `KEY_SDL` | Shift+Удалить строку |1721| `KEY_SELECT` | Выбор |1722| `KEY_SEND` | Shift+Конец |1723| `KEY_SEOL` | Shift+Очистка строки |1724| `KEY_SEXIT` | Сдвинутый Dxit |1725| `KEY_SFIND` | Shift+Найти |1726| `KEY_SHELP` | Shift+Справка |1727| `KEY_SHOME` | Shift+Начало |1728| `KEY_SIC` | Shift+Ввод |1729| `KEY_SLEFT` | Shift+Стрелка влево |1730| `KEY_SMESSAGE` | Shift+Сообщение |1731| `KEY_SMOVE` | Shift+Перемещение |1732| `KEY_SNEXT` | Shift+Далее |1733| `KEY_SOPTIONS` | Shift+Параметры |1734| `KEY_SPREVIOUS` | Shift+Назад |1735| `KEY_SPRINT` | Shift+Печать |1736| `KEY_SREDO` | Shift+Повтор |1737| `KEY_SREPLACE` | Замена с Shift |1738| `KEY_SRIGHT` | Стрелка вправо с Shift |1739| `KEY_SRSUME` | Возобновление с Shift |1740| `KEY_SSAVE` | Сохранение с Shift |1741| `KEY_SSUSPEND` | Приостановка с Shift |1742| `KEY_SUNDO` | Отмена с Shift |1743| `KEY_SUSPEND` | Приостановить |1744| `KEY_UNDO` | Отменить |1745| `KEY_MOUSE` | Событие мыши |1746| `KEY_RESIZE` | Событие изменения размера терминала |1747| `KEY_MAX` | Максимальное значение клавиши |17481749На VT100 и их программных эмуляциях, таких как эмуляторы терминала X, обычно доступны по меньшей мере четыре функциональные клавиши (`KEY_F1`, `KEY_F2`, `KEY_F3`, `KEY_F4`), а клавиши со стрелками отображаются на `KEY_UP`, `KEY_DOWN`, `KEY_LEFT` и `KEY_RIGHT` очевидным образом. Если используется клавиатура PC, можно рассчитывать на клавиши со стрелками и двенадцать функциональных клавиш (на старых клавиатурах PC может быть только десять функциональных клавиш); кроме того, стандартными являются следующие сопоставления цифровой клавиатуры:17501751| Клавиша | Константа |1752| --- | --- |1753| `Вставка` | KEY\_IC |1754| `Удаление` | KEY\_DC |1755| `Home` | KEY\_HOME |1756| `End` | KEY\_END |1757| `Page Up` | KEY\_NPAGE |1758| `Page Down` | KEY\_PPAGE |17591760В следующей таблице перечислены символы из альтернативного набора символов. Они унаследованы от терминала VT100 и обычно доступны в программных эмуляциях, таких как X терминалы. Если графический символ недоступен, curses использует грубое приближение в виде печатных символов ASCII.17611762> **Примечание**1763>1764> Доступны только после вызова [`initscr()`](https://python-all.ru/3.1/library/curses.html#curses.initscr).17651766| Код ACS | Значение |1767| --- | --- |1768| `ACS_BBSS` | альтернативное имя для правого верхнего угла |1769| `ACS_BLOCK` | сплошной квадратный блок |1770| `ACS_BOARD` | доска из квадратов |1771| `ACS_BSBS` | альтернативное имя для горизонтальной линии |1772| `ACS_BSSB` | альтернативное имя для левого верхнего угла |1773| `ACS_BSSS` | альтернативное имя для верхнего тройника |1774| `ACS_BTEE` | нижний тройник |1775| `ACS_BULLET` | маркер |1776| `ACS_CKBOARD` | шахматная доска (точечный узор) |1777| `ACS_DARROW` | стрелка вниз |1778| `ACS_DEGREE` | символ градуса |1779| `ACS_DIAMOND` | ромб |1780| `ACS_GEQUAL` | больше или равно |1781| `ACS_HLINE` | горизонтальная линия |1782| `ACS_LANTERN` | символ фонаря |1783| `ACS_LARROW` | стрелка влево |1784| `ACS_LEQUAL` | меньше или равно |1785| `ACS_LLCORNER` | левый нижний угол |1786| `ACS_LRCORNER` | правый нижний угол |1787| `ACS_LTEE` | левый тройник |1788| `ACS_NEQUAL` | знак не равно |1789| `ACS_PI` | буква пи |1790| `ACS_PLMINUS` | плюс-минус |1791| `ACS_PLUS` | большой плюс |1792| `ACS_RARROW` | стрелка вправо |1793| `ACS_RTEE` | правый тройник |1794| `ACS_S1` | линия развертки 1 |1795| `ACS_S3` | линия развертки 3 |1796| `ACS_S7` | линия развертки 7 |1797| `ACS_S9` | линия развертки 9 |1798| `ACS_SBBS` | альтернативное название правого нижнего угла |1799| `ACS_SBSB` | другое название вертикальной линии |1800| `ACS_SBSS` | альтернативное название правого тройника |1801| `ACS_SSBB` | альтернативное название левого нижнего угла |1802| `ACS_SSBS` | альтернативное название нижнего тройника |1803| `ACS_SSSB` | альтернативное название левого тройника |1804| `ACS_SSSS` | альтернативное название перекрестия или большого плюса |1805| `ACS_STERLING` | фунт стерлингов |1806| `ACS_TTEE` | верхний тройник |1807| `ACS_UARROW` | стрелка вверх |1808| `ACS_ULCORNER` | левый верхний угол |1809| `ACS_URCORNER` | правый верхний угол |1810| `ACS_VLINE` | вертикальная линия |18111812В следующей таблице перечислены предопределённые цвета:18131814| Константа | Цвет |1815| --- | --- |1816| `COLOR_BLACK` | Чёрный |1817| `COLOR_BLUE` | Синий |1818| `COLOR_CYAN` | Голубой (светлый сине-зелёный) |1819| `COLOR_GREEN` | Зелёный |1820| `COLOR_MAGENTA` | Пурпурный (красновато-фиолетовый) |1821| `COLOR_RED` | Красный |1822| `COLOR_WHITE` | Белый |1823| `COLOR_YELLOW` | Жёлтый |18241825# 15.9. `curses.textpad` – виджет ввода текста для программ curses18261827Модуль `curses.textpad` предоставляет класс [`Textbox`](https://python-all.ru/3.1/library/curses.html#curses.textpad.Textbox), который выполняет базовое редактирование текста в окне curses, поддерживая набор сочетаний клавиш, напоминающий сочетания в Emacs (а также в Netscape Navigator, BBedit 6.x, FrameMaker и многих других программах). Модуль также предоставляет функцию рисования прямоугольников, полезную для обрамления текстовых полей или для других целей.18281829Модуль `curses.textpad` определяет следующую функцию:18301831#### `curses.textpad.rectangle(win, uly, ulx, lry, lrx)`18321833Рисует прямоугольник. Первый аргумент должен быть оконным объектом; остальные аргументы – координаты относительно этого окна. Второй и третий аргументы – координаты y и x верхнего левого угла прямоугольника; четвёртый и пятый – координаты y и x нижнего правого угла. Прямоугольник рисуется с использованием символов псевдографики VT100/IBM PC на терминалах, которые это поддерживают (включая xterm и большинство других программных эмуляторов терминала). В противном случае он рисуется с помощью символов ASCII: дефисов, вертикальных черт и знаков плюс.18341835## 15.9.1. Объекты Textbox18361837Можно создать экземпляр объекта [`Textbox`](https://python-all.ru/3.1/library/curses.html#curses.textpad.Textbox) следующим образом:18381839#### `class curses.textpad.Textbox(win)`18401841Возвращает объект виджета текстового поля. Аргумент *win* должен быть объектом `WindowObject` curses, в котором будет размещено текстовое поле. Курсор редактирования текстового поля изначально находится в верхнем левом углу содержащего окна, с координатами `(0, 0)`. Флаг экземпляра [`stripspaces`](https://python-all.ru/3.1/library/curses.html#curses.textpad.Textbox.stripspaces) изначально включён.18421843Объекты [`Textbox`](https://python-all.ru/3.1/library/curses.html#curses.textpad.Textbox) имеют следующие методы:18441845#### `edit([validator])`18461847Это основная точка входа, которую обычно используют. Она принимает редактирующие нажатия клавиш до тех пор, пока не будет введена одна из завершающих комбинаций. Если передан18481849*validator*18501851, он должен быть функцией. Она будет вызываться для каждого введённого символа с этим символом в качестве параметра; диспетчеризация команд выполняется на основе результата. Этот метод возвращает содержимое окна в виде строки; включение пробелов в окне зависит от атрибута18521853[`stripspaces`](https://python-all.ru/3.1/library/curses.html#curses.textpad.Textbox.stripspaces)18541855.18561857#### `do_command(ch)`18581859Обрабатывает одно нажатие командной клавиши. Ниже перечислены поддерживаемые специальные нажатия клавиш:18601861| Клавиша | Действие |1862| --- | --- |1863| `Control-A` | Переход к левому краю окна. |1864| `Control-B` | Курсор влево, с переносом на предыдущую строку (если применимо). |1865| `Control-D` | Удалить символ под курсором. |1866| `Control-E` | Перейти к правому краю (stripspaces off) или в конец строки (stripspaces on). |1867| `Control-F` | Курсор вправо, с переносом на следующую строку (если применимо). |1868| `Control-G` | Завершить, вернув содержимое окна. |1869| `Control-H` | Удалить предыдущий символ. |1870| `Control-J` | Завершает, если окно имеет 1 строку, в противном случае вставляет новую строку. |1871| `Control-K` | Если строка пуста, удалить её, в противном случае очистить до конца строки. |1872| `Control-L` | Обновить экран. |1873| `Control-N` | Курсор вниз; переместиться на одну строку вниз. |1874| `Control-O` | Вставить пустую строку в позиции курсора. |1875| `Control-P` | Курсор вверх; переместиться на одну строку вверх. |18761877Операции перемещения не выполняются, если курсор находится у края, где движение невозможно. Там, где это возможно, поддерживаются следующие синонимы:18781879| Константа | Клавиша |1880| --- | --- |1881| `KEY_LEFT` | `Control-B` |1882| `KEY_RIGHT` | `Control-F` |1883| `KEY_UP` | `Control-P` |1884| `KEY_DOWN` | `Control-N` |1885| `KEY_BACKSPACE` | `Control-h` |18861887Все остальные нажатия клавиш обрабатываются как команда вставить указанный символ и переместиться вправо (с переносом строки).18881889#### `gather()`18901891Этот метод возвращает содержимое окна в виде строки; то, включаются ли пробелы в окне, зависит от члена18921893[`stripspaces`](https://python-all.ru/3.1/library/curses.html#curses.textpad.Textbox.stripspaces)18941895.18961897#### `stripspaces`18981899Этот член данных – флаг, управляющий интерпретацией пробелов в окне. Когда он включён, концевые пробелы в каждой строке игнорируются; любое движение курсора, которое привело бы к попаданию на концевой пробел, вместо этого переводит курсор в конец строки, и концевые пробелы удаляются при получении содержимого окна.19001901# 15.10. `curses.wrapper` – Обработчик терминала для программ curses19021903Этот модуль предоставляет одну функцию [`wrapper()`](https://python-all.ru/3.1/library/curses.html#curses.wrapper.wrapper), которая запускает другую функцию, составляющую основную часть приложения, использующего curses. Если приложение вызывает исключение, [`wrapper()`](https://python-all.ru/3.1/library/curses.html#curses.wrapper.wrapper) восстановит терминал в нормальное состояние, прежде чем повторно вызвать исключение и сгенерировать traceback.19041905#### `curses.wrapper.wrapper(func, ...)`19061907Функция-обёртка, которая инициализирует curses и вызывает другую функцию19081909*func*19101911, восстанавливая нормальное поведение клавиатуры/экрана в случае ошибки. Затем вызываемому объекту19121913*func*19141915передаётся главное окно «stdscr» в качестве первого аргумента, за которым следуют любые другие аргументы, переданные19161917[`wrapper()`](https://python-all.ru/3.1/library/curses.html#curses.wrapper.wrapper)19181919.19201921Перед вызовом функции-обработчика [`wrapper()`](https://python-all.ru/3.1/library/curses.html#curses.wrapper.wrapper) включает режим cbreak, отключает эхо, включает клавиатуру терминала и инициализирует цвета, если терминал поддерживает цвет. При завершении (как обычном, так и по исключению) он восстанавливает cooked-режим, включает эхо и отключает клавиатуру терминала.1922