任意のgtk.Widgetをappindicator.Indicatorに入れる


18

空のgtk.MenuItemを最初に配置することで、gtk.Widgetをgtk.Menu内に配置することは、いくらか機能します。信頼できるとは思えませんが、基本的には機能します。appindicator.Indicatorでは機能しません。エントリは空のままです。たとえば、child [border_size]を32に設定しても。

動作する唯一のウィジェットはgtk.Label(そしてもちろんMenuItem、ImageMenuItemなど)です。

Meメニューにはgtk.Entryが含まれているので、これを確実に適切に行うことができるはずです。どうすればいいのですか?

以下は、私が何をしているのかを説明するためのサンプルコードです。

    self.item = gtk.MenuItem()
    self.item.add(gtk.Label("hello world!"))
    self.menu.append(self.item)

上記のコードは機能しますが、これは機能しません。

    self.item = gtk.MenuItem()
    self.item.add(gtk.Entry())
    self.menu.append(self.item)

self.menuがappindicator.Indicatorである場合、gtk.Menuであれば、エントリは少なくとも表示されます。

動作するコードは次のとおりです。

import gtk
import appindicator

class AppIndicator (object):

    def __init__(self):
        self.ind = appindicator.Indicator("hello world client",
            "distributor-logo", appindicator.CATEGORY_APPLICATION_STATUS)
        self.ind.set_status (appindicator.STATUS_ACTIVE)
        self.menu = gtk.Menu()
        item = gtk.MenuItem()

        item.add(gtk.Label("hello world"))
        # item.add(gtk.Entry())

        self.menu.append(item)
        self.menu.show_all()
        self.ind.set_menu(self.menu)


indicator = AppIndicator()
gtk.main()

@MarcoCeppiが私に思い出させたように、はい-これは機能するはずがありません。私はただ望んで夢を見ているだけかもしれません。Meメニューは一見似たようなことをするので。
ステファノパラッツォ

1
Meメニューは、それを行うためにリビドー(インジケーター表示オブジェクト)を使用していると確信しています。参照:launchpad.net/ido特に、idoentrymenuitem.c(bazaar.launchpad.net/~canonical-dx-team/ido/trunk/annotate/...)。残念ながら、Pythonバインディングはないと思います。ayatana-devのメーリングリストで質問することをお勧めします。
アンドリューサム

これを行う方法を見つけましたか?私は同じ問題に直面しています。ありがとう。
ベンジャミン

回答:


7

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

そのようなことをサポートすることへの大きな障害の1つは、アプリケーションインジケーターメニューが別のプロセス、アプリケーションインジケータープロセスによってレンダリングされるため、プログラムがその上に直接描画するためのアクセス権を持たないという事実です。これを克服するには、D-BusメニューでX-Embedのようなものをサポートするか、すべてのGTKがD-Busで動作できるようにする必要があります。


2

Ubuntuのサウンドインジケーターには音量のスライダーがあり、どのようにそれが可能か疑問に思いました。コードを見てみると、その間dbusを介して入力できるGtkMenusがあるようです:https ://developer.ubuntu.com/api/devel/ubuntu-12.04/c/dbusmenugtk/index.html

しかし、私はそれらを使用する方法がわかりません。pavucontrolでできるように、アプリごとに音量を制御できるサウンドインジケーターを作成したかった。

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