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

curses.md

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

1> **Источник:** https://python-all.ru/3.15/c-api/curses.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Curses C API89[`curses`](https://python-all.ru/3.15/library/curses.html#module-curses) предоставляет небольшой C-интерфейс для модулей расширения. Потребители должны включать заголовочный файл `py_curses.h` (который по умолчанию не включается `Python.h`), а [`import_curses()`](https://python-all.ru/3.15/c-api/curses.html#c.import_curses) должна вызываться, обычно как часть функции инициализации модуля, для заполнения [`PyCurses_API`](https://python-all.ru/3.15/c-api/curses.html#c.PyCurses_API).1011> **Предупреждение**12>13> Ни C API, ни чистый Python-модуль [`curses`](https://python-all.ru/3.15/library/curses.html#module-curses) не совместимы с субинтерпретаторами.1415#### `import_curses()`1617Импортирует curses C API. Для вызова макроса не требуется точка с запятой.1819При успехе заполняет указатель [`PyCurses_API`](https://python-all.ru/3.15/c-api/curses.html#c.PyCurses_API).2021При ошибке устанавливает [`PyCurses_API`](https://python-all.ru/3.15/c-api/curses.html#c.PyCurses_API) в NULL и устанавливает исключение. Вызывающий код должен проверить, произошла ли ошибка, с помощью [`PyErr_Occurred()`](https://python-all.ru/3.15/c-api/exceptions.html#c.PyErr_Occurred):2223```c24import_curses();  // точка с запятой необязательна, но рекомендуется25if (PyErr_Occurred()) { /* очистка */ }26```2728#### `void **PyCurses_API`2930Динамически размещаемый объект, содержащий curses C API. Эта переменная доступна только после успешного выполнения [`import_curses`](https://python-all.ru/3.15/c-api/curses.html#c.import_curses).3132`PyCurses_API[0]` соответствует [`PyCursesWindow_Type`](https://python-all.ru/3.15/c-api/curses.html#c.PyCursesWindow_Type).3334`PyCurses_API[1]`, `PyCurses_API[2]` и `PyCurses_API[3]` – указатели на функции-предикаты типа `int (*)(void)`.3536При вызове эти предикаты возвращают, были ли вызваны [`curses.setupterm()`](https://python-all.ru/3.15/library/curses.html#curses.setupterm), [`curses.initscr()`](https://python-all.ru/3.15/library/curses.html#curses.initscr) и [`curses.start_color()`](https://python-all.ru/3.15/library/curses.html#curses.start_color) соответственно.3738Смотрите также вспомогательные макросы [`PyCursesSetupTermCalled`](https://python-all.ru/3.15/c-api/curses.html#c.PyCursesSetupTermCalled), [`PyCursesInitialised`](https://python-all.ru/3.15/c-api/curses.html#c.PyCursesInitialised) и [`PyCursesInitialisedColor`](https://python-all.ru/3.15/c-api/curses.html#c.PyCursesInitialisedColor).3940> **Примечание**41>42> Количество записей в этой структуре может изменяться. Рассмотрите использование [`PyCurses_API_pointers`](https://python-all.ru/3.15/c-api/curses.html#c.PyCurses_API_pointers) для проверки, доступны ли новые поля.4344#### `PyCurses_API_pointers`4546Количество доступных полей (`4`) в [`PyCurses_API`](https://python-all.ru/3.15/c-api/curses.html#c.PyCurses_API). Это число увеличивается при добавлении новых полей.4748#### `PyTypeObject PyCursesWindow_Type`4950[тип-куча](https://python-all.ru/3.15/c-api/typeobj.html#heap-types), соответствующий [`curses.window`](https://python-all.ru/3.15/library/curses.html#curses.window).5152#### `int PyCursesWindow_Check(PyObject *op)`5354Возвращает true, если *op* является экземпляром [`curses.window`](https://python-all.ru/3.15/library/curses.html#curses.window), и false в противном случае.5556Следующие макросы являются вспомогательными макросами, разворачивающимися в C-инструкции. В частности, их можно использовать только как `macro;` или `macro`, но не как `macro()` или `macro();`.5758#### `PyCursesSetupTermCalled`5960Макрос, проверяющий, была ли вызвана [`curses.setupterm()`](https://python-all.ru/3.15/library/curses.html#curses.setupterm).6162Развёрнутый макрос примерно эквивалентен:6364```c65{66    typedef int (*predicate_t)(void);67    predicate_t was_setupterm_called = (predicate_t)PyCurses_API[1];68    if (!was_setupterm_called()) {69        return NULL;70    }71}72```7374#### `PyCursesInitialised`7576Макрос, проверяющий, была ли вызвана [`curses.initscr()`](https://python-all.ru/3.15/library/curses.html#curses.initscr).7778Развёрнутый макрос примерно эквивалентен:7980```c81{82    typedef int (*predicate_t)(void);83    predicate_t was_initscr_called = (predicate_t)PyCurses_API[2];84    if (!was_initscr_called()) {85        return NULL;86    }87}88```8990#### `PyCursesInitialisedColor`9192Макрос, проверяющий, была ли вызвана [`curses.start_color()`](https://python-all.ru/3.15/library/curses.html#curses.start_color).9394Развёрнутый макрос примерно эквивалентен:9596```c97{98    typedef int (*predicate_t)(void);99    predicate_t was_start_color_called = (predicate_t)PyCurses_API[3];100    if (!was_start_color_called()) {101        return NULL;102    }103}104```105106# Внутренние данные107108Следующие объекты предоставляются C API, но предназначены только для внутреннего использования.109110#### `PyCurses_CAPSULE_NAME`111112Имя капсулы curses, передаваемое в [`PyCapsule_Import()`](https://python-all.ru/3.15/c-api/capsule.html#c.PyCapsule_Import).113114Только для внутреннего использования. Вместо этого используйте [`import_curses`](https://python-all.ru/3.15/c-api/curses.html#c.import_curses).115