> **Источник:** https://python-all.ru/2.7/library/easydialogs.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 37.5. [`EasyDialogs`](https://python-all.ru/2.7/library/easydialogs.html#module-EasyDialogs) – Основные диалоги Macintosh

Модуль [`EasyDialogs`](https://python-all.ru/2.7/library/easydialogs.html#module-EasyDialogs) содержит несколько простых диалогов для Macintosh. Диалоги запускаются в отдельном приложении, которое появляется в доке, и по нему нужно щёлкнуть, чтобы диалоги отобразились. Все подпрограммы принимают необязательный параметр идентификатора ресурса *id*, с помощью которого можно переопределить ресурс `DLOG`, используемый для диалога, при условии, что элементы диалога соответствуют (по типу и номеру) элементам в стандартном ресурсе `DLOG`. Подробнее см. в исходном коде.

> **Примечание**
>
> Этот модуль был удалён в Python 3.x.

Модуль [`EasyDialogs`](https://python-all.ru/2.7/library/easydialogs.html#module-EasyDialogs) определяет следующие функции:

#### `EasyDialogs.Message(str[, id[, ok]])`

Отображает модальный диалог с текстом сообщения *str*. Длина текста не должна превышать 255 символов. Текст кнопки по умолчанию – «OK», но он заменяется на строку аргумента *ok*, если он указан. Управление возвращается, когда пользователь нажимает кнопку «OK».

#### `EasyDialogs.AskString(prompt[, default[, id[, ok[, cancel]]]])`

Запрашивает у пользователя ввод строки через модальный диалог. *prompt* – это приглашающее сообщение, а необязательный аргумент *default* задаёт начальное значение строки (в противном случае используется `""`). Текст кнопок «OK» и «Cancel» можно изменить с помощью аргументов *ok* и *cancel*. Все строки могут быть длиной не более 255 байт. [`AskString()`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.AskString) возвращает введённую строку или [`None`](https://python-all.ru/2.7/library/constants.html#None), если пользователь отменил ввод.

#### `EasyDialogs.AskPassword(prompt[, default[, id[, ok[, cancel]]]])`

Запрашивает у пользователя ввод строки через модальный диалог. Как [`AskString()`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.AskString), но вводимый текст отображается в виде точек. Аргументы имеют тот же смысл, что и для [`AskString()`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.AskString).

#### `EasyDialogs.AskYesNoCancel(question[, default[, yes[, no[, cancel[, id]]]]])`

Отображает диалог с приглашением *question* и тремя кнопками «Yes», «No» и «Cancel». Возвращает `1` для «Yes», `0` для «No» и `-1` для «Cancel». Значение *default* (или `0`, если *default* не указано) возвращается при нажатии клавиши `RETURN`. Текст кнопок можно изменить с помощью аргументов *yes*, *no* и *cancel*; чтобы скрыть кнопку, укажите `""` для соответствующего аргумента.

#### `EasyDialogs.ProgressBar([title[, maxval[, label[, id]]]])`

Отображает немодальный диалог с индикатором выполнения. Это конструктор для класса [`ProgressBar`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar), описанного ниже. *title* – отображаемый текст строки (по умолчанию «Working…»), *maxval* – значение, при котором выполнение завершено (по умолчанию `0`, что означает, что остаётся неопределённое количество работы), и *label* – текст, отображаемый над самой полосой прогресса.

#### `EasyDialogs.GetArgv([optionlist[ commandlist[, addoldfile[, addnewfile[, addfolder[, id]]]]]])`

Отображает диалог, помогающий пользователю составить список аргументов командной строки. Возвращает список в формате `sys.argv`, подходящий для передачи в качестве аргумента в [`getopt.getopt()`](https://python-all.ru/2.7/library/getopt.html#getopt.getopt). *addoldfile*, *addnewfile* и *addfolder* являются логическими аргументами. Если они не равны нулю, они позволяют пользователю вставлять в командную строку пути к существующему файлу, (возможно) ещё не существующему файлу и папке соответственно. (Примечание: аргументы-опции должны указываться в командной строке перед аргументами файлов и папок, чтобы быть распознанными [`getopt.getopt()`](https://python-all.ru/2.7/library/getopt.html#getopt.getopt).) Аргументы, содержащие пробелы, можно указывать, заключая их в одинарные или двойные кавычки. Исключение [`SystemExit`](https://python-all.ru/2.7/library/exceptions.html#exceptions.SystemExit) возбуждается, если пользователь нажимает кнопку «Cancel».

*optionlist* – это список, определяющий всплывающее меню, из которого выбираются допустимые опции. Его элементы могут быть одного из двух видов: *optstr* или `(optstr, descr)`. Если указан, *descr* – это короткая описательная строка, которая отображается в диалоге, пока эта опция выбрана во всплывающем меню. Соответствие между *optstr* и аргументами командной строки:

| Формат *optstr* | Формат командной строки |
| --- | --- |
| `x` | `-x` (короткая опция) |
| `x:` или `x=` | `-x` (короткая опция со значением) |
| `xyz` | `--xyz` (длинная опция) |
| `xyz:` или `xyz=` | `--xyz` (длинная опция со значением) |

*commandlist* – это список элементов вида *cmdstr* или `(cmdstr, descr)`, где *descr* – как указано выше. Строки *cmdstr* будут отображаться во всплывающем меню. При выборе текст *cmdstr* будет добавлен в командную строку как есть, за исключением того, что завершающий `':'` или `'='` (если присутствуют) будут удалены.

Новое в версии 2.0.

#### `EasyDialogs.AskFileForOpen([message] [, typeList] [, defaultLocation] [, defaultOptionFlags] [, location] [, clientName] [, windowTitle] [, actionButtonLabel] [, cancelButtonLabel] [, preferenceKey] [, popupExtension] [, eventProc] [, previewProc] [, filterProc] [, wanted] )`

Показывает диалог, запрашивающий у пользователя файл для открытия, и возвращает выбранный файл или [`None`](https://python-all.ru/2.7/library/constants.html#None), если пользователь отменил. *message* – текст сообщения для отображения, *typeList* – список допустимых 4-символьных типов файлов, *defaultLocation* – это путь, `FSSpec` или `FSRef` папки, которая отображается изначально, *location* – это `(x, y)` позиция на экране, где отображается диалог, *actionButtonLabel* – строка, отображаемая вместо «Open» в кнопке OK, *cancelButtonLabel* – строка, отображаемая вместо «Cancel» в кнопке отмены, *wanted* – тип возвращаемого значения: [`str`](https://python-all.ru/2.7/library/functions.html#str), [`unicode`](https://python-all.ru/2.7/library/functions.html#unicode), `FSSpec`, `FSRef` и их подтипы допустимы.

Описание остальных аргументов см. в документации Apple Navigation Services и в исходном коде [`EasyDialogs`](https://python-all.ru/2.7/library/easydialogs.html#module-EasyDialogs).

#### `EasyDialogs.AskFileForSave([message] [, savedFileName] [, defaultLocation] [, defaultOptionFlags] [, location] [, clientName] [, windowTitle] [, actionButtonLabel] [, cancelButtonLabel] [, preferenceKey] [, popupExtension] [, fileType] [, fileCreator] [, eventProc] [, wanted] )`

Показывает диалог, запрашивающий у пользователя файл для сохранения, и возвращает выбранный файл или [`None`](https://python-all.ru/2.7/library/constants.html#None), если пользователь отменил. *savedFileName* – имя файла по умолчанию для сохранения (возвращаемое значение). Описание остальных аргументов см. в [`AskFileForOpen()`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.AskFileForOpen).

#### `EasyDialogs.AskFolder([message] [, defaultLocation] [, defaultOptionFlags] [, location] [, clientName] [, windowTitle] [, actionButtonLabel] [, cancelButtonLabel] [, preferenceKey] [, popupExtension] [, eventProc] [, filterProc] [, wanted] )`

Показывает диалог, запрашивающий у пользователя выбор папки, и возвращает выбранную папку или [`None`](https://python-all.ru/2.7/library/constants.html#None), если пользователь отменил. Описание аргументов см. в [`AskFileForOpen()`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.AskFileForOpen).

> **См. также**
>
> **[Справочник по Navigation Services](https://python-all.ru/2.7/library/easydialogs.html)**
>
> Справочная документация для разработчиков по Navigation Services, части фреймворка Carbon.

## 37.5.1. Объекты ProgressBar

Объекты [`ProgressBar`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar) обеспечивают поддержку немодальных диалогов с индикатором выполнения. Поддерживаются как детерминированные (термометр), так и индетерминированные (столбик парикмахерской) индикаторы выполнения. Индикатор будет детерминированным, если его максимальное значение больше нуля; в противном случае он будет индетерминированным.

Изменено в версии 2.2: Добавлена поддержка индетерминированных индикаторов выполнения.

Диалог отображается сразу после создания. Если нажата кнопка «Отмена» в диалоге, или набрано `Cmd-.` или `ESC`, окно диалога скрывается и возникает исключение [`KeyboardInterrupt`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyboardInterrupt) (но обратите внимание, что эта реакция происходит только при следующем обновлении индикатора выполнения, обычно при вызове `inc()` или [`set()`](https://python-all.ru/2.7/library/stdtypes.html#set)). В противном случае индикатор остаётся видимым до тех пор, пока объект [`ProgressBar`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar) не будет удалён.

Объекты [`ProgressBar`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar) имеют следующие атрибуты и методы:

#### `ProgressBar.curval`

Текущее значение индикатора выполнения (тип int или long). Обычные методы доступа приводят [`curval`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar.curval) к диапазону от `0` до [`maxval`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar.maxval). Этот атрибут не следует изменять напрямую.

#### `ProgressBar.maxval`

Максимальное значение индикатора выполнения (тип int или long); индикатор (стиль термометр) заполнен, когда [`curval`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar.curval) равно [`maxval`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar.maxval). Если [`maxval`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar.maxval) равно `0`, индикатор будет индетерминированным (столбик парикмахерской). Этот атрибут не следует изменять напрямую.

#### `ProgressBar.title([newstr])`

Устанавливает текст в строке заголовка диалога выполнения равным *newstr*.

#### `ProgressBar.label([newstr])`

Устанавливает текст в поле выполнения диалога выполнения равным *newstr*.

#### `ProgressBar.set(value[, max])`

Устанавливает [`curval`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar.curval) индикатора выполнения в *value*, а также [`maxval`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar.maxval) в *max*, если последнее указано. *value* сначала приводится к диапазону от 0 до [`maxval`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar.maxval). Индикатор-термометр обновляется для отражения изменений, включая изменение с индетерминированного на детерминированный и наоборот.

#### `ProgressBar.inc([n])`

Увеличивает [`curval`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar.curval) индикатора выполнения на *n* или на `1`, если *n* не указан. (Обратите внимание, что *n* может быть отрицательным, в этом случае происходит уменьшение.) Индикатор выполнения обновляется для отражения изменения. Если индикатор индетерминированный, это вызывает один «оборот» столбика парикмахерской. Полученное [`curval`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar.curval) приводится к диапазону от 0 до [`maxval`](https://python-all.ru/2.7/library/easydialogs.html#EasyDialogs.ProgressBar.maxval), если приращение выводит его за этот диапазон.
