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

---

# 39.4. [`fl`](https://python-all.ru/2.7/library/fl.html#module-fl) – библиотека FORMS для графических пользовательских интерфейсов

Устарело с версии 2.6: Модуль [`fl`](https://python-all.ru/2.7/library/fl.html#module-fl) удалён в Python 3.

Этот модуль предоставляет интерфейс к библиотеке FORMS Марка Овермарса. Исходный код библиотеки можно получить анонимным FTP с хоста `ftp.cs.ruu.nl`, каталог `SGI/FORMS`. Последний раз он тестировался с версией 2.0b.

Большинство функций являются буквальным переводом их C-эквивалентов, с опусканием начального `fl_` в имени. Константы, используемые библиотекой, определены в модуле [`FL`](https://python-all.ru/2.7/library/fl.html#module-FL), описанном ниже.

Создание объектов в Python немного отличается от C: вместо «текущей формы», поддерживаемой библиотекой, к которой добавляются новые объекты FORMS, все функции, добавляющие объект FORMS в форму, являются методами объекта Python, представляющего форму. Следовательно, в Python нет аналогов для C-функций `fl_addto_form()` и `fl_end_form()`, а аналог `fl_bgn_form()` называется [`fl.make_form()`](https://python-all.ru/2.7/library/fl.html#fl.make_form).

Остерегайтесь несколько запутанной терминологии: FORMS использует слово *объект* для кнопок, ползунков и т.п., которые можно размещать в форме. В Python «объект» означает любое значение. Интерфейс Python к FORMS вводит два новых типа объектов Python: объекты формы (представляющие всю форму) и объекты FORMS (представляющие одну кнопку, ползунок и т.д.). Надеюсь, это не слишком запутывает.

В интерфейсе Python к FORMS нет «свободных объектов», а также нет простого способа добавить классы объектов, написанные на Python. Впрочем, интерфейс FORMS к обработке событий GL доступен, так что можно смешивать FORMS с чистыми окнами GL.

**Пожалуйста, обратите внимание:** импорт [`fl`](https://python-all.ru/2.7/library/fl.html#module-fl) подразумевает вызов функции GL `foreground()` и процедуры FORMS `fl_init()`.

## 39.4.1. Функции, определённые в модуле [`fl`](https://python-all.ru/2.7/library/fl.html#module-fl)

Модуль [`fl`](https://python-all.ru/2.7/library/fl.html#module-fl) определяет следующие функции. Дополнительную информацию о том, что они делают, см. в описании эквивалентной C-функции в документации FORMS:

#### `fl.make_form(type, width, height)`

Создаёт форму с заданными типом, шириной и высотой. Возвращает *форму*, методы которой описаны ниже.

#### `fl.do_forms()`

Стандартный главный цикл FORMS. Возвращает объект Python, представляющий объект FORMS, требующий взаимодействия, или специальное значение `FL.EVENT`.

#### `fl.check_forms()`

Проверяет события FORMS. Возвращает то же, что [`do_forms()`](https://python-all.ru/2.7/library/fl.html#fl.do_forms) выше, или `None`, если нет события, требующего немедленного взаимодействия.

#### `fl.set_event_call_back(function)`

Устанавливает функцию обратного вызова для событий.

#### `fl.set_graphics_mode(rgbmode, doublebuffering)`

Устанавливает графические режимы.

#### `fl.get_rgbmode()`

Возвращает текущий режим RGB. Это значение глобальной переменной C `fl_rgbmode`.

#### `fl.show_message(str1, str2, str3)`

Показывает диалоговое окно с трёхстрочным сообщением и кнопкой OK.

#### `fl.show_question(str1, str2, str3)`

Показывает диалоговое окно с трёхстрочным сообщением и кнопками ДА и НЕТ. Возвращает `1`, если пользователь нажал ДА, и `0`, если НЕТ.

#### `fl.show_choice(str1, str2, str3, but1[, but2[, but3]])`

Показывает диалоговое окно с трёхстрочным сообщением и до трёх кнопок. Возвращает номер кнопки, нажатой пользователем (`1`, `2` или `3`).

#### `fl.show_input(prompt, default)`

Показывает диалоговое окно с однострочным сообщением-подсказкой и текстовым полем, в которое пользователь может ввести строку. Второй аргумент – строка ввода по умолчанию. Возвращает строковое значение, отредактированное пользователем.

#### `fl.show_file_selector(message, directory, pattern, default)`

Показывает диалоговое окно, в котором пользователь может выбрать файл. Возвращает абсолютное имя файла, выбранное пользователем, или `None`, если пользователь нажал «Отмена».

#### `fl.get_directory()`

#### `fl.get_pattern()`

#### `fl.get_filename()`

Эти функции возвращают каталог, шаблон и имя файла (только хвост), выбранные пользователем в последнем вызове [`show_file_selector()`](https://python-all.ru/2.7/library/fl.html#fl.show_file_selector).

#### `fl.qdevice(dev)`

#### `fl.unqdevice(dev)`

#### `fl.isqueued(dev)`

#### `fl.qtest()`

#### `fl.qread()`

#### `fl.qreset()`

#### `fl.qenter(dev, val)`

#### `fl.get_mouse()`

#### `fl.tie(button, valuator1, valuator2)`

Эти функции являются интерфейсами FORMS к соответствующим функциям GL. Используйте их, если требуется самостоятельно обрабатывать некоторые события GL при использовании `fl.do_events()`. Когда обнаружено событие GL, которое FORMS не может обработать, [`fl.do_forms()`](https://python-all.ru/2.7/library/fl.html#fl.do_forms) возвращает специальное значение `FL.EVENT`, и следует вызвать [`fl.qread()`](https://python-all.ru/2.7/library/fl.html#fl.qread) для чтения события из очереди. Не используйте eквивалентные функции GL!

#### `fl.color()`

#### `fl.mapcolor()`

#### `fl.getmcolor()`

Смотрите описание `fl_color()`, `fl_mapcolor()` и `fl_getmcolor()` в документации FORMS.

## 39.4.2. Объекты форм

Объекты форм (возвращаемые [`make_form()`](https://python-all.ru/2.7/library/fl.html#fl.make_form) выше) имеют следующие методы. Каждый метод соответствует C-функции, имя которой имеет префикс `fl_`; и первым аргументом которой является указатель на форму; за описаниями обращайтесь к официальной документации FORMS.

Все методы `add_*()` возвращают объект Python, представляющий объект FORMS. Методы объектов FORMS описаны ниже. Большинство типов объектов FORMS также имеют некоторые методы, специфичные для данного типа; эти методы перечислены здесь.

#### `form.show_form(placement, bordertype, name)`

Показать форму.

#### `form.hide_form()`

Скрыть форму.

#### `form.redraw_form()`

Перерисовать форму.

#### `form.set_form_position(x, y)`

Установить положение формы.

#### `form.freeze_form()`

Заморозить форму.

#### `form.unfreeze_form()`

Разморозить форму.

#### `form.activate_form()`

Активировать форму.

#### `form.deactivate_form()`

Деактивировать форму.

#### `form.bgn_group()`

Начать новую группу объектов; возвращает объект группы.

#### `form.end_group()`

Завершить текущую группу объектов.

#### `form.find_first()`

Найти первый объект в форме.

#### `form.find_last()`

Найти последний объект в форме.

#### `form.add_box(type, x, y, w, h, name)`

Добавить объект-бокс в форму. Дополнительных методов нет.

#### `form.add_text(type, x, y, w, h, name)`

Добавить текстовый объект в форму. Дополнительных методов нет.

#### `form.add_clock(type, x, y, w, h, name)`

Добавить объект-часы в форму. – Метод: `get_clock()`.

#### `form.add_button(type, x, y, w, h, name)`

Добавить объект-кнопку в форму. – Методы: `get_button()`, `set_button()`.

#### `form.add_lightbutton(type, x, y, w, h, name)`

Добавить объект-световую кнопку в форму. – Методы: `get_button()`, `set_button()`.

#### `form.add_roundbutton(type, x, y, w, h, name)`

Добавляет объект roundbutton в форму. – Методы: `get_button()`, `set_button()`.

#### `form.add_slider(type, x, y, w, h, name)`

Добавляет объект slider в форму. – Методы: `set_slider_value()`, `get_slider_value()`, `set_slider_bounds()`, `get_slider_bounds()`, `set_slider_return()`, `set_slider_size()`, `set_slider_precision()`, `set_slider_step()`.

#### `form.add_valslider(type, x, y, w, h, name)`

Добавляет объект valslider в форму. – Методы: `set_slider_value()`, `get_slider_value()`, `set_slider_bounds()`, `get_slider_bounds()`, `set_slider_return()`, `set_slider_size()`, `set_slider_precision()`, `set_slider_step()`.

#### `form.add_dial(type, x, y, w, h, name)`

Добавляет объект dial в форму. – Методы: `set_dial_value()`, `get_dial_value()`, `set_dial_bounds()`, `get_dial_bounds()`.

#### `form.add_positioner(type, x, y, w, h, name)`

Добавляет объект positioner в форму. – Методы: `set_positioner_xvalue()`, `set_positioner_yvalue()`, `set_positioner_xbounds()`, `set_positioner_ybounds()`, `get_positioner_xvalue()`, `get_positioner_yvalue()`, `get_positioner_xbounds()`, `get_positioner_ybounds()`.

#### `form.add_counter(type, x, y, w, h, name)`

Добавляет объект counter в форму. – Методы: `set_counter_value()`, `get_counter_value()`, `set_counter_bounds()`, `set_counter_step()`, `set_counter_precision()`, `set_counter_return()`.

#### `form.add_input(type, x, y, w, h, name)`

Добавляет объект input в форму. – Методы: `set_input()`, `get_input()`, `set_input_color()`, `set_input_return()`.

#### `form.add_menu(type, x, y, w, h, name)`

Добавляет объект menu в форму. – Методы: `set_menu()`, `get_menu()`, `addto_menu()`.

#### `form.add_choice(type, x, y, w, h, name)`

Добавляет объект choice в форму. – Методы: `set_choice()`, `get_choice()`, `clear_choice()`, `addto_choice()`, `replace_choice()`, `delete_choice()`, `get_choice_text()`, `set_choice_fontsize()`, `set_choice_fontstyle()`.

#### `form.add_browser(type, x, y, w, h, name)`

Добавляет объект browser в форму. – Методы: `set_browser_topline()`, `clear_browser()`, `add_browser_line()`, `addto_browser()`, `insert_browser_line()`, `delete_browser_line()`, `replace_browser_line()`, `get_browser_line()`, `load_browser()`, `get_browser_maxline()`, `select_browser_line()`, `deselect_browser_line()`, `deselect_browser()`, `isselected_browser_line()`, `get_browser()`, `set_browser_fontsize()`, `set_browser_fontstyle()`, `set_browser_specialkey()`.

#### `form.add_timer(type, x, y, w, h, name)`

Добавляет объект timer в форму. – Методы: `set_timer()`, `get_timer()`.

Объекты формы имеют следующие атрибуты данных; см. документацию FORMS:

| Имя | Тип C | Значение |
| --- | --- | --- |
| `window` | int (только для чтения) | идентификатор окна GL |
| `w` | float | ширина формы |
| `h` | float | высота формы |
| `x` | float | начальная x-координата формы |
| `y` | float | начальная y-координата формы |
| `deactivated` | int | ненулевое значение, если форма деактивирована |
| `visible` | int | ненулевое значение, если форма видима |
| `frozen` | int | ненулевое значение, если форма заморожена |
| `doublebuf` | int | ненулевое значение, если включена двойная буферизация |

## 39.4.3. Объекты FORMS

Помимо методов, специфичных для конкретных типов объектов FORMS, все объекты FORMS также имеют следующие методы:

#### `FORMS object.set_call_back(function, argument)`

Устанавливает колбэк-функцию объекта и её аргумент. Когда объекту требуется взаимодействие, колбэк-функция вызывается с двумя аргументами: объектом и аргументом колбэка. (Объекты FORMS без колбэк-функции возвращаются функциями [`fl.do_forms()`](https://python-all.ru/2.7/library/fl.html#fl.do_forms) или [`fl.check_forms()`](https://python-all.ru/2.7/library/fl.html#fl.check_forms), когда им требуется взаимодействие.) Вызов этого метода без аргументов удаляет колбэк- функцию.

#### `FORMS object.delete_object()`

Удаляет объект.

#### `FORMS object.show_object()`

Показывает объект.

#### `FORMS object.hide_object()`

Скрывает объект.

#### `FORMS object.redraw_object()`

Перерисовывает объект.

#### `FORMS object.freeze_object()`

Замораживает объект.

#### `FORMS object.unfreeze_object()`

Размораживает объект.

Объекты FORMS имеют следующие атрибуты данных; см. документацию FORMS:

| Имя | Тип C | Значение |
| --- | --- | --- |
| `objclass` | int (только для чтения) | класс объекта |
| [`type`](https://python-all.ru/2.7/library/functions.html#type) | int (только для чтения) | тип объекта |
| `boxtype` | int | тип рамки |
| `x` | float | начальная координата x |
| `y` | float | начальная координата y |
| `w` | float | ширина |
| `h` | float | рост |
| `col1` | int | основной цвет |
| `col2` | int | вторичный цвет |
| `align` | int | выравнивание |
| `lcol` | int | цвет метки |
| `lsize` | float | размер шрифта метки |
| `label` | строка | строка метки |
| `lstyle` | int | стиль метки |
| `pushed` | int (только для чтения) | (см. документацию FORMS) |
| `focus` | int (только для чтения) | (см. документацию FORMS) |
| `belowmouse` | int (только для чтения) | (см. документацию FORMS) |
| `frozen` | int (только для чтения) | (см. документацию FORMS) |
| `active` | int (только для чтения) | (см. документацию FORMS) |
| [`input`](https://python-all.ru/2.7/library/functions.html#input) | int (только для чтения) | (см. документацию FORMS) |
| `visible` | int (только для чтения) | (см. документацию FORMS) |
| `radio` | int (только для чтения) | (см. документацию FORMS) |
| `automatic` | int (только для чтения) | (см. документацию FORMS) |

# 39.5. [`FL`](https://python-all.ru/2.7/library/fl.html#module-FL) – Константы, используемые с модулем [`fl`](https://python-all.ru/2.7/library/fl.html#module-fl)

Устарело с версии 2.6: Модуль [`FL`](https://python-all.ru/2.7/library/fl.html#module-FL) удалён в Python 3.

Этот модуль определяет символьные константы, необходимые для использования встроенного модуля [`fl`](https://python-all.ru/2.7/library/fl.html#module-fl) (см. выше); они эквивалентны определённым в заголовочном файле C `<forms.h>`, за исключением того, что префикс имени `FL_` опущен. Для получения полного списка определённых имён обратитесь к исходному коду модуля. Рекомендуемое использование:

```python
import fl
from FL import *
```

# 39.6. [`flp`](https://python-all.ru/2.7/library/fl.html#module-flp) – Функции для загрузки сохранённых макетов FORMS

Устарело с версии 2.6: Модуль [`flp`](https://python-all.ru/2.7/library/fl.html#module-flp) удалён в Python 3.

Этот модуль определяет функции, которые могут читать определения форм, созданные программой «form designer» (**fdesign**), входящей в состав библиотеки FORMS (см. модуль [`fl`](https://python-all.ru/2.7/library/fl.html#module-fl) выше).

Пока что обратитесь к файлу `flp.doc` в каталоге исходных кодов библиотеки Python для получения описания.

XXX Здесь должно быть вставлено полное описание!
