PythonでのアプリインジケーターでのGtk.Widgetsの使用


44

2010年、Stefano Palazzoは、関連する質問として、任意のgtk.Widgetをappindicator.Indicatorに配置し、StackOverflowで同様の質問をしました。どちらの場合でも、Ubuntuのアプリインジケータは限られているというコンセンサスです。マイケル・エクスストランドが言ったように:

アプリケーションインジケータメニューのサポートは、サポートする内容が制限されているD-Busメニューに基づいています-任意のウィジェットなどのよりエキゾチックなものではなく、基本的なメニュー機能のみをサポートします。

ただし、2016年の今日のBluetoothインジケーターの表示とは矛盾しています。トグルスイッチを使用しています。

ここに画像の説明を入力してください

13.04のUbuntu Oneインジケーターでも同じことが観察できます。

ここに画像の説明を入力してください

したがって、明らかに方法があります。私はインジケーターブルートゥースのソースコードを勉強しましたが、それはValaで書かれています。ただし、私は主にpythonで作業します。既存のすべてのインジケーターを書き換えるだけでValaを学習するのは少し大変です。

質問の核心:Pythonを使用して、どのようにGtk.Widgetsを使用できますか、または少なくともBluetoothインジケーターのようにトグルスイッチを使用できますか?

:私はこの質問に報奨金を与えて、Pythonでの実例を提供する回答に報いるつもりです。他の言語は受け入れられません。


6
アプリケーションインジケータは、アイコンをオンザフライでサポートしていなくても制限されます(ファイルシステムから画像ファイルをロードするだけです)。あなたが言及したこれらのインジケーターは、SYSTEMインジケーター(bluetooth、ubuntu one、sound、powerなど)です。それらは異なり、libappindicatorを使用していません。違いをはっきりさせるのを助けるかもしれないいくつかの投稿をすでに投稿しました。私はすでにCを使用して動作するシステムインジケーターを取得しましたが、Pythonではまだ苦労しています。
user.dz

2
この質問にUbuntuコア開発者の注意を引く方法はありますか?
-don.joey

1
少なくともtest = Gtk.CheckMenuItem("Monkey")チェックボタンを追加することで機能しますが、もっとあるはずです。これ機能しますが、これは機能するはずですが、機能しません Gtk.CheckMenuItemToggled("Monkey")。とにかくうまくいくと確信しています。参照:developer.gnome.org/gtk3/stable/GtkCheckMenuItem.html
Jacob Vlijm

1
はい@JacobVlijm、任意の単一のmenuitem作品を追加し、それはまた、Gtk.Boxを追加し、そのボックスにGtk.Labelを追加するために動作しますが、他には何も(これは、ウィジェットが一つだけのアイテムを含めることができると言いません。
Sergiy Kolodyazhnyy

1
Gtk.ImageMenuItembtwの使用は推奨されて
おら

回答:


1

この問題が存在するのは、AppIndicatorsがインジケーターメニューの作成を簡単にする一方で、それらを作成する邪魔になるからです。Bluetoothコードのように、AppIndicatorを使用したPythonコードの例とGLibメニューを使用したPythonコードの違いを見てみましょう。

まずgtk.Menu、を作成するように指示されます。これらは、古いスタイルのGtkメニューオブジェクトGtk.Actionであり、現在使用されていません。AppIndicatorは、プロセスgtk.Menu中にオブジェクトを取得set_menu(...)して解析し、検出した各メニューをを使用して作成されたインジケーターサービスにプッシュしlibdbusmenuます。この解析プロセスは、AppIndicatorでサポートされていないものは何を行ってもフィルターで除外されることを意味します。

次に、Bluetoothメニューを見てみましょう。これはGio.Menuオブジェクトを使用して作成され、これらはGActionシステムを使用する新しいスタイルのGnomeメニューです。次に、AppIndicatoror を使用せずに独自のサービスを登録libdbusmenuし、カスタムx-canonical-typeプロパティを使用しlibidoて解析用に渡されるスイッチウィジェットを作成します。

すべてのCanonical独自のUnityカスタマイズであるため、この演習全体はかなり悪いです。したがって、団結が始まるとすぐに、指示者はいません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.