### ナビゲーション

- 索引
- モジュール |
- 次へ |
- 前へ |
- Python 2.7ja1 documentation »
- Python 標準ライブラリ »
- 38. SGI IRIX 固有のサービス »

# 38.4. `fl` — グラフィカルユーザーインターフェースのための FORMS ライブラリ

バージョン 2.6 で撤廃: `fl` モジュールは Python 3.0 での削除に向けて非推奨になりました。

このモジュールは、Mark Overmars による FORMS ライブラリへのインターフェースを提供します。 FORMS ライブラリのソースは anonymous ftp `ftp.cs.ruu.nl` の `SGI/FORMS` ディレクトリから入手できます。最新のテストはバージョン2.0bで行いました。

ほとんどの関数は接頭辞の `fl_` を取ると、対応する C の関数名になります。ライブラリで使われる定数は後述の `FL` モジュールで定義されています。

Python でこのオブジェクトを作る方法は C とは少し違っています：ライブラリに保持された’現在のフォーム’に新しい FORMS オブジェクトを加えるのではなく、フォームに FORMS オブジェクトを加えるには、フォームを示す Python オブジェクトのメソッドで全て行います。したがって、C の関数の `fl_addto_form()` と `fl_end_form()` に相当するものは Python にはありませんし、 `fl_bgn_form()` に相当するものとしては `fl.make_form()` を呼び出します。

用語のちょっとした混乱に注意してください： FORMS ではフォームの中に置くことができるボタン、スライダーなどに object の用語を使います。 Python では全ての値が’オブジェクト’です。 FORMS への Python のインターフェースによって、2つの新しいタイプの Python オブジェクト：フォームオブジェクト（フォーム全体を示します）と FORMS オブジェクト（ボタン、スライダーなどの一つひとつを示します）を作ります。おそらく、混乱するほどのことではありません。

FORMS への Python インターフェースに’フリーオブジェクト’はありませんし、 Python でオブジェクトクラスを書いて加える簡単な方法もありません。しかし、GL イベントハンドルへの FORMS インターフェースが利用可能で、純粋な GL ウィンドウに FORMS を組み合わせることができます。

注意： `fl` をインポートすると、GL の関数 `foreground()` と FORMS のルーチン `fl_init()` を呼び出します。

## 38.4.1. `fl` モジュールに定義されている関数

`fl` モジュールには以下の関数が定義されています。これらの関数の働きに関する詳しい情報については、FORMS ドキュメントで対応する C の関数の説明を参照してください。

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

  与えられたタイプ、幅、高さでフォームを作ります。これは form オブジェクトを返します。このオブジェクトは後述のメソッドを持ちます。

`fl.``do_forms`()

  標準の FORMS のメインループです。ユーザからの応答が必要な FORMS オブジェクトを示す Python オブジェクト、あるいは特別な値 `FL.EVENT` を返します。

`fl.``check_forms`()

  FORMS イベントを確認します。 `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)

  3行のメッセージと OK ボタンのあるダイアログボックスを表示します。

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

  3行のメッセージと YES、NO のボタンのあるダイアログボックスを表示します。ユーザによって YES が押されたら `1` 、NO が押されたら `0` を返します。

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

  3行のメッセージと最大3つまでのボタンのあるダイアログボックスを表示します。ユーザによって押されたボタンの数値を返します (それぞれ `1` 、 `2` 、 `3`)。

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

  1行のプロンプトメッセージと、ユーザが入力できるテキストフィールドを持つダイアログボックスを表示します。 2番目の引数はデフォルトで表示される入力文字列です。ユーザが入力した文字列が返されます。

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

  ファイル選択ダイアログを表示します。ユーザによって選択されたファイルの絶対パス、あるいはユーザが Cancel ボタンを押した場合は `None` を返します。

`fl.``get_directory`()
`fl.``get_pattern`()
`fl.``get_filename`()

  これらの関数は最後にユーザが `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)

  これらの関数は対応する GL 関数への FORMS のインターフェースです。 `fl.do_events()` を使っていて、自分で何か GL イベントを操作したいときにこれらを使います。FORMS が扱うことのできない GL イベントが検出されたら `fl.do_forms()` が特別の値 `FL.EVENT` を返すので、 `fl.qread()` を呼び出して、キューからイベントを読み込むべきです。対応する GL の関数は使わないでください！

`fl.``color`()
`fl.``mapcolor`()
`fl.``getmcolor`()

  FORMS ドキュメントにある `fl_color()` 、 `fl_mapcolor()` 、 `fl_getmcolor()` の記述を参照してください。

## 38.4.2. フォームオブジェクト

フォームオブジェクト（上で述べた `make_form()` で返されます）には下記のメソッドがあります。各メソッドは名前の接頭辞に `fl_` を付けた C の関数に対応します；また、最初の引数はフォームのポインタです；説明はFORMSの公式文書を参照してください。

全ての `add_*()` メソッドは、 FORMS オブジェクトを示す Python オブジェクトを返します。 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)

  フォームにラウンドボタンオブジェクトを加えます。 — メソッド： `get_button()` 、 `set_button()` 。

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

  フォームにスライダーオブジェクトを加えます。 — メソッド： `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)

  フォームにバリュースライダーオブジェクトを加えます。 — メソッド： `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)

  フォームにダイアルオブジェクトを加えます。 — メソッド： `set_dial_value()` 、 `get_dial_value()` 、 `set_dial_bounds()` 、 `get_dial_bounds()` 。

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

  フォームに2次元ポジショナーオブジェクトを加えます。 — メソッド： `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)

  フォームにカウンタオブジェクトを加えます。 — メソッド： `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)

  フォームにインプットオブジェクトを加えます。 — メソッド： `set_input()` 、 `get_input()` 、 `set_input_color()` 、 `set_input_return()` 。

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

  フォームにメニューオブジェクトを加えます。 — メソッド： `set_menu()` 、 `get_menu()` 、 `addto_menu()` 。

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

  フォームにチョイスオブジェクトを加えます。 — メソッド： `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)

  フォームにブラウザオブジェクトを加えます。 — メソッド： `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)

  フォームにタイマーオブジェクトを加えます。 — メソッド： `set_timer()` 、 `get_timer()` 。

フォームオブジェクトには以下のデータ属性があります；FORMS ドキュメントを参照してください：

名称 | Cの型 | 意味
--- | --- | ---
`window` | int (read-only) | GLウィンドウのid
`w` | float | フォームの幅
`h` | float | フォームの高さ
`x` | float | フォーム左肩のx座標
`y` | float | フォーム左肩のy座標
`deactivated` | int | フォームがディアクティベートされているなら非ゼロ
`visible` | int | フォームが可視なら非ゼロ
`frozen` | int | フォームが固定されているなら非ゼロ
`doublebuf` | int | ダブルバッファリングがオンなら非ゼロ

## 38.4.3. FORMSオブジェクト

FORMS オブジェクトの種類ごとに特有のメソッドの他に、全てのFORMSオブジェクトは以下のメソッドも持っています：

`FORMS object.set_call_back(function, argument)`

  オブジェクトのコールバック関数と引数を設定します。オブジェクトがユーザからの応答を必要とするときには、コールバック関数は2 つの引数、オブジェクトとコールバックの引数とともに呼び出されます。（コールバック関数のない FORMS オブジェクトは、ユーザからの応答を必要とするときには `fl.do_forms()` あるいは `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 (read-only) | オブジェクトクラス
`type` | int (read-only) | オブジェクトタイプ
`boxtype` | int | ボックスタイプ
`x` | float | 左肩のx座標
`y` | float | 左肩のy座標
`w` | float | 幅
`h` | float | 高さ
`col1` | int | 第1の色
`col2` | int | 第2の色
`align` | int | 配置
`lcol` | int | ラベルの色
`lsize` | float | ラベルのフォントサイズ
`label` | string | ラベルの文字列
`lstyle` | int | ラベルのスタイル
`pushed` | int (read-only) | （FORMSドキュメント参照）
`focus` | int (read-only) | （FORMSドキュメント参照）
`belowmouse` | int (read-only) | （FORMSドキュメント参照）
`frozen` | int (read-only) | （FORMSドキュメント参照）
`active` | int (read-only) | （FORMSドキュメント参照）
`input` | int (read-only) | （FORMSドキュメント参照）
`visible` | int (read-only) | （FORMSドキュメント参照）
`radio` | int (read-only) | （FORMSドキュメント参照）
`automatic` | int (read-only) | （FORMSドキュメント参照）

# 38.5. `FL` — `fl` モジュールで使用される定数

バージョン 2.6 で撤廃: `FL` モジュールは Python 3.0 での削除に向けて非推奨になりました。

このモジュールには、組み込みモジュール `fl` を使うのに必要なシンボル定数が定義されています (上記参照) ；これらは名前の接頭辞 `FL_` が省かれていることを除いて、C のヘッダファイル `<forms.h>` に定義されているものと同じです。定義されている名称の完全なリストについては、モジュールのソースをご覧ください。お勧めする使い方は以下の通りです：

    import fl
    from FL import *

# 38.6. `flp` — 保存されたFORMSデザインをロードする関数

バージョン 2.6 で撤廃: `flp` モジュールは Python 3.0 での削除に向けて非推奨になりました。

このモジュールには、FORMSライブラリ (上記の `fl` モジュールを参照してください) とともに配布される ‘フォームデザイナー’ (fdesign) プログラムで作られたフォームの定義を読み込む関数が定義されています。

詳しくはPythonライブラリソースのディレクトリの中の `flp.doc` を参照してください。

XXX　完全な説明をここに書いて！

### ナビゲーション

- 索引
- モジュール |
- 次へ |
- 前へ |
- Python 2.7ja1 documentation »
- Python 標準ライブラリ »
- 38. SGI IRIX 固有のサービス »