Glade3 におけるカスタム PyGTK ウィジット

Custom PyGTK Widgets in Glade3 by Ali Afshar

# 本稿は上記リンク元の和訳になります
# 本稿の規約・ライセンス等はオリジナルのそれに従います
# 転載ミス、誤訳等については適宜修正します

gimp のようなマルチウィンドウビューを取り除いて、一般的なアプリケーションのようになったリリース 3.1 以降の Glade 3 は、素晴らしい GTK ユーザインタフェースデザイナです。他の素晴らしい機能として、非 C 言語(PyGTK など)で作成されたウィジットがサポートされている事です。

プラグインコンポーネント:

  1. カタログファイル
  2. サポートモジュール
  3. イコン画像 (オプション)


例として、(私が書いた) Kiwi ハイパーリンクウィジットを使います。このウィジットは EventBox のサブクラスです。従って、私はユーザインタフェースデザイナ内で必要としない追加プロパティの幾つかを省略しながら説明します。

カタログファイル

これは http://glade.gnome.org/docs/catalogintro.html に記載されている内容の続きになります。原則として、カタログには2つのセクションがあります:

  1. ウィジット定義
  2. カタログリスト


ウィジット定義とは以下のようなものです:




大抵の場合、ウィジットクラスの属性として使用されます、しかし、ドキュメントページ上で概説される場合もあります。

リストしているカタログは、とても基本的なものです。そして、不変的に以下のフォームを取ります:



これは現在有効な全てのウィジットをリストしています。今のところ、ドキュメントから外れていません。これは、どのようにして非 PyGTK のウィジットを追加するかの方法です。

PyGTK を使っているあなたが glade に理解させるためにしなければいけない事は、これをカタログのためにメインドキュメント要素に使用する事です:


language="python" によって、kiwiwidgets.py が呼ばれるとき、 追加の "kiwiwidgets" ライブラリ属性が私たちのサポートするライブラリのロケーションを定義します。

カタログファイルは、glade3 カタログディレクトリ上の他のカタログと共に自分のシステム上に存在すべきです:

/usr/local/share/glade3/catalogs/kiwiwidgets.xml

widget-class タグで タグを使っているユーザインタフェースデザイナにおいて、表示されている様々なプロパティをオフにすることができます。この例は以下のようになります:



2つのプロパティを示しました。1番目は、UI デザイナ(ユーザが注意していない)の内部で表示したくない EventBox のプロパティです。シンプルに visible="False" として実現されます。2番目は、プロパティを変更する方法を示します。私たちは、この変換可能なハイパーリンクウィジットのテキストが欲しいです。それと共に Glade 内で全ての変換フックにアクセスします。

サポートモジュール

サポートモジュールは、私たちのウィジットを実行する python コードです。基本的な例では、カスタムアダプタのように好みで何かを定義ていません、又は私たちが優れていると感じたカスタムエディタでさえそうです。しかし、おそらく別のブログ記事として投稿するために残しておきます。

サポートモジュールは、glade モジュールディレクトリに存在すべきです。そして、カタログファイル内で定義された名前であるべきです。私のシステム上では、以下の場所になります:

/usr/local/lib/glade3/modules/kiwiwidgets.py

この単純なケースにおけるモジュールのコードは、HyperLink クラスの import ステートメント(GObject タイプとして、それを登録するために必要とされる全て)のたった1行だけ含みます。

from kiwi.ui.hyperlink import HyperLink

Glade3 は私たちに安息を与えてくれます。
以上です。他のアイテムは後ほどアップされるでしょう:

  • カスタムアダプタの定義
  • カスタムウィジットエディタの定義
  • box サブクラスのための glade クエリスライシング
  • Python からの glade UI 制御

他に興味深い事があれば私はそれに対応するでしょう。

注意: API は早期に変更され、後方互換性は重要視していません。従って、如何なるコードも使い捨てとして用意されています。