Документация Python неофициальный перевод

curses.md

1023 строк · 89.7 КБ · обычная страница · сырой текст · скачать

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