помещение произвольного gtk.widget в appindicator.indicator

<p>помещение любого gtk.widget в gtk.menu работает, в некотором смысле, сначала помещая пустой gtk.menuitem. это не кажется надежным - но в основном это работает. с appindicator.indicator это не работает. запись просто остается пустой. даже если вы установите для дочернего элемента [border\_size] значение 32, например.</p><p>единственный работающий виджет - это gtk.label (плюс, конечно, menuitem, imagemenuitem и так далее).</p><p>теперь в me me есть gtk.entry, поэтому должно быть возможно сделать это правильно. как мне это сделать?</p><p>вот пример кода, чтобы объяснить, о чем я:</p><pre><code> self.item = gtk.menuitem() self.item.add(gtk.label("hello world!")) self.menu.append(self.item) </code></pre><p>приведенный выше код работает, однако это не так:</p><pre><code> self.item = gtk.menuitem() self.item.add(gtk.entry()) self.menu.append(self.item) </code></pre><p>где self.menu является appindicator.indicator, если бы это было gtk.menu, запись будет отображаться по крайней мере.</p><p>вот некоторый рабочий код:</p><pre><code>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() </code></pre>

<p>поддержка меню application indicator основана на меню d-bus, которые ограничены в том, что они поддерживают - они поддерживают только базовые функции меню, а не более экзотические вещи, такие как произвольные виджеты.</p><p>одним из существенных препятствий для тех, кто когда-либо поддерживал такие вещи, является тот факт, что меню индикаторов приложения отображается другим процессом, процессом индикатора приложения, поэтому ваша программа не имеет доступа, чтобы напрямую что-либо рисовать на нем. преодоление этого потребовало бы либо поддержки чего-то вроде x-embed в меню d-bus, либо разрешения всем gtk работать через d-bus.</p>

<p>у звукового индикатора в ubuntu есть ползунки для регулировки громкости, и я подумал, как это возможно. после просмотра кода кажется, что gtkmenus можно заполнить через dbus: <a href="https://developer.ubuntu.com/api/devel/ubuntu-12.04/c/dbusmenugtk/index.html">https://developer.ubuntu.com/api/devel/ubuntu-12.04/c/dbusmenugtk/index.html</a> знак равно</p><p>но я не знаю, как их использовать. хотел написать звуковой индикатор, чтобы я мог контролировать громкость для каждого приложения, как это делает pavucontrol.</p>