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

バージョン 2.6 で撤廃: fl モジュールは Python 3 で削除されました。

このモジュールは、Mark Overmars による FORMS ライブラリへのインターフェースを提供します。 FORMS ライブラリのソースは anonymous FTP ftp.cs.ruu.nlSGI/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() を呼び出します。

39.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つまでのボタンのあるダイアログボックスを表示します。ユーザによって押されたボタンの数値を返します (それぞれ 123)。

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() の記述を参照してください。

39.4.2. Form オブジェクト

フォームオブジェクト (上で述べた 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 ダブルバッファリングがオンなら非ゼロ

39.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 ドキュメント参照)

39.5. FLfl モジュールで使用される定数

バージョン 2.6 で撤廃: FL モジュールは Python 3 で削除されました。

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

import fl
from FL import *

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

バージョン 2.6 で撤廃: flp モジュールは Python 3 で削除されました。

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

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

XXX A complete description should be inserted here!