5.11. アドオン GUI の高度な機能
pyanaconda
パッケージには、ヘルパー関数やユーティリティー関数が複数含まれ、ハブやスポークで使用されるコンストラクトも含まれます。そのほとんどは、pyanaconda.ui.gui.utils
パッケージにあります。
Hello World
アドオンの例は、Anaconda も使用する englightbox
コンテンツマネージャーの使用方法を示しています。このコンテンツマネージャーはウィンドウをライトボックスに入れ、可視性を高め、ユーザーの基礎となるウィンドウとの対話を防ぐことに重点を置くことができます。この機能を示すために、サンプルアドオンには新しいダイアログウィンドウを開くボタンが含まれています。ダイアログ自体は、pyanaconda.ui.gui.init で定義される GUIObject クラスから継承される特別な HelloWorldDialog です。
ダイアログクラスは、self.window 属性を介してアクセス可能な内部 Gtk ダイアログを実行および破棄する run メソッドを定義します。この属性は、同じ意味の mainWidgetName クラス属性を使用して設定されます。そのため、以下の例のようにダイアログを定義するコードは非常にシンプルです。
例5.9 englightbox Dialog の定義
# every GUIObject gets ksdata in init
dialog = HelloWorldDialog(self.data)
# show dialog above the lightbox
with self.main_window.enlightbox(dialog.window):
dialog.run()
Defining an englightbox Dialog
のサンプルコードは、ダイアログのインスタンスを作成してから、enlightbox コンテキストマネージャーを使用してライトボックス内でダイアログを実行します。コンテキストマネージャーにはスポークのウィンドウへの参照があり、ダイアログのライトボックスをインスタンス化するためにダイアログのウィンドウだけを必要とします。
Anaconda が提供するもう 1 つの便利な機能は、インストール時および最初の再起動後に表示されるスポークを定義する機能です。Initial Setup
ユーティリティーは、アドオングラフィカルユーザーインターフェイス (GUI) のサポートの追加 で説明されています。Anaconda と初期セットアップの両方でスポークを使用できるようにするには、pyanaconda.ui.common
モジュールで定義される最初の継承クラスとして、特別な FirstbootSpokeMixIn
クラス (別称 mixin
) を継承する必要があります。
スポークを Anaconda および初期セットアップの再設定モードで使用できるようにするには、pyanaconda.ui.common
モジュールで定義された最初の継承クラスとして、mixin
とも呼ばれる特別な FirstbootSpokeMixIn
クラスを継承する必要があります。
初期セットアップでのみ特定のスポークを利用可能にする場合は、このスポークは代わりに FirstbootOnlySpokeMixIn
クラスを継承する必要があります。
次の例に示すように、スポークを Anaconda と初期設定の両方で常に使用できるようにするには、スポークで should_run
メソッドを再定義する必要があります。
例5.10 should_run メソッドの再定義
@classmethod def should_run(cls, environment, data): """Run this spoke for Anaconda and Initial Setup""" return True
pyanaconda
パッケージは、@gtk_action_wait
および @gtk_action_nowait
デコレーターなど、より高度な機能を提供しますが、これらは本書の対象外となっています。その他の例については、インストーラーのソースを参照してください。