5.10. アドオングラフィカルユーザーインターフェイス (GUI) のサポートの追加
次の大まかな手順を実行することで、アドオンのグラフィカルユーザーインターフェイス (GUI) にサポートを追加できます。
- Normalspoke クラスに必要な属性を定義します。
-
__init__
とinitialize
メソッドを定義します。 -
refresh
、apply
、およびexecute
メソッドを定義します。 -
status
およびready
、completed
およびmandatory
のプロパティーを定義します。
前提条件
- アドオンには、キックスタートのサポートが含まれています。Anaconda アドオンの構造 を参照してください。
-
Anaconda
固有の Gtk ウィジェット (SpokeWindow
など) が含まれる anaconda-widgets および anaconda-widgets-devel パッケージをインストールします。
手順
以下の例に従って、アドオングラフィカルユーザーインターフェイス (GUI) のサポートを追加するために必要なすべての定義で以下のモジュールを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow __all__
属性はspoke
クラスをエクスポートします。この後に、以前 GUI アドオンの基本機能 で言及した、属性の定義を含む定義の最初の行が続きます。これらの属性値は、com_example_hello_world/gui/spokes/hello.glade
ファイルで定義されるウィジェットを参照します。この他に、以下の 2 つの重要な属性があります。-
category
。この値は、com_example_hello_world.gui.categories
モジュールのHelloWorldCategory
クラスからインポートされます。アドオンへのパスがsys.path
にあるHelloWorldCategory
。これにより、com_example_hello_world
パッケージから値をインポートできます。category
属性はN_ function
名の一部で、変換用の文字列をマークしますが、変換は後の段階で行われるため、変換されていない文字列のバージョンを返します。 タイトル
。定義内にアンダースコアが 1 つ含まれています。title
属性アンダースコアは、タイトル自体の先頭をマークし、Alt+H
キーボードショートカットを使用してスポークに到達できるようにします。通常、クラス定義のヘッダーとクラス
attributes
の定義に続くのは、クラスのインスタンスを初期化するコンストラクターです。Anaconda グラフィカルインターフェイスオブジェクトの場合、新しいインスタンスの初期化には__init__
メソッドおよびinitialize
メソッドの 2 つのメソッドがあります。このようなメソッドが 2 つある理由は、
spoke
の初期化に時間がかかる可能性があるため、あるタイミングで GUI オブジェクトがメモリーに作成され、別のタイミングで完全に初期化される可能性があるためです。したがって、__init__
メソッドは親の__init__
メソッドのみを呼び出し、たとえば、GUI 以外の属性を初期化する必要があります。一方、インストーラーのグラフィカルユーザーインターフェイスの初期化時に呼び出されるinitialize
メソッドは、スポークの完全な初期化を完了する必要があります。Hello World add-on
の例で、以下のようにこの 2 つのメソッドを定義します。__init__
メソッドに渡される引数の数および説明をメモしてください。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow __init__
メソッドに渡されるデータパラメーターは、すべてのデータが保存されるキックスタートファイルのメモリー内ツリーのような表示になります。ancestor の__init__
メソッドのいずれかで、self.data
属性に格納されます。これにより、クラス内の他のすべてのメソッドで構造の読み取りおよび修正が可能になります。注記RHEL10 以降、
storage object
は利用できなくなりました。アドオンがストレージ設定と対話する必要がある場合は、Storage DBus
モジュールを使用します。HelloWorldData クラスは Hello World アドオンの例 ですでに定義されているため、このアドオンの self.data にはすでにサブツリーがあります。クラスのインスタンスである root は
self.data.addons.com_example_hello_world
として利用できます。ancestor の
__init__
が実行するもう 1 つのアクションは、spoke's .glade
で GtkBuilder のインスタンスを初期化し、これをself.builder
として保存することです。initialize
メソッドはこれを使用して、キックスタートファイルの %addon セクションにあるテキストを表示し、変更するために使用されるGtkTextEntry
を取得します。__init__
およびinitialize
メソッドは両方とも、スポークの作成時に重要となります。ただし、スポークの主なロールは、スポークの値の表示と設定を変更または確認したいユーザーがアクセスすることです。これを有効にするには、その他の 3 つの方法を使用できます。-
refresh
: スポークがアクセスされようとするときに呼び出されます。このメソッドは、スポーク (主に UI 要素) の状態を更新し、表示されるデータが内部データ構造と一致するようにします。これにより、self.data 構造に保存されている現在の値が表示されるようにします。 -
apply
: スポークが残っている場合に呼び出され、UI 要素の値をself.data
構造に戻す際に使用されます。 execute
: ユーザーがスポークを離れる場合に呼び出され、スポークの新しい状態に基づいてランタイムの変更を実行する際に使用されます。これらの関数は、以下のように Hello World アドオンのサンプルに実装されます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 複数の追加のメソッドを使用して、スポークの状態を制御できます。
-
ready
: スポークへアクセスできるかどうかを判断します。値が "False" の場合はspoke
へアクセスできません。たとえば、パッケージソースを設定する前にPackage Selection
スポークにアクセスできません。 -
completed
- スポークが完了しているかどうかを確認します。 mandatory
: スポークが必須かどうかを判別します。たとえば、自動パーティションを使用する場合でも、常にアクセスする必要があるInstallation Destination
スポークが必須かどうか判別します。これらの属性はすべて、インストールプロセスの現在の状態に基づいて動的に決定する必要があります。以下は、Hello World アドオンでのこれらのメソッドの実装例です。これには、
HelloWorldData
クラスの text 属性に特定の値を設定する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらのプロパティーが定義された後、スポークはそのアクセス可能性と完全性を制御できますが、内部で設定された値のサマリーを提供することはできません。スポークにアクセスして、スポークがどのように設定されているかを確認する必要がありますが、これは望ましくない場合があります。このため、
status
という追加のプロパティーが存在します。このプロパティーには、設定された値の短いサマリーを含む 1 行のテキストが含まれ、スポークタイトルの下のハブに表示することができます。status プロパティーは、以下のように
Hello World
の例のアドオンで定義されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例で説明しているプロパティーをすべて定義した後に、アドオンには、グラフィカルユーザーインターフェイス (GUI) とキックスタートを示す完全なサポートがあります。
注記ここで示した例は非常にシンプルで、制御を含むものはありません。GUI で機能的かつインタラクティブなスポークを開発するには、Python Gtk プログラミングに関する知識が必要です。
主な制限の 1 つとして、それぞれのスポークに独自のメインウィンドウ (
SpokeWindow
ウィジェットのインスタンス) が必要である点が挙げられます。このウィジェットは、Anaconda 固有の他のウィジェットとともに、anaconda-widgets
パッケージにあります。Glade
など、GUI サポートでアドオンの開発に必要な他のファイルは、anaconda-widgets-devel
パッケージで見つけることができます。グラフィカルインターフェイスのサポートモジュールに必要なメソッドをすべて含めたら、次のセクションに進み、テキストベースのユーザーインターフェイスのサポートを追加できます。