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パッケージで見つけることができます。グラフィカルインターフェイスのサポートモジュールに必要なメソッドをすべて含めたら、次のセクションに進み、テキストベースのユーザーインターフェイスのサポートを追加できます。