Das Einfügen von gtk.Widget in ein gtk.Menu funktioniert in gewisser Weise, indem zuerst ein leeres gtk.MenuItem eingefügt wird. Es scheint nicht zuverlässig zu sein - aber es funktioniert im Grunde. Mit einem Indikator. Indikator funktioniert es nicht. Der Eintrag bleibt einfach leer. Auch wenn Sie beispielsweise das untergeordnete Element [border_size] auf 32 setzen.
Das einzige Widget, das funktioniert, ist ein gtk.Label (plus das MenuItem, ImageMenuItem und so weiter natürlich).
Jetzt hat das Me-Menü einen gtk.Entry, also muss es sicher möglich sein, dies richtig zu machen. Wie mache ich es?
Hier ist ein Beispielcode, um zu erklären, worüber ich rede:
self.item = gtk.MenuItem()
self.item.add(gtk.Label("hello world!"))
self.menu.append(self.item)
Der obige Code funktioniert, dies jedoch nicht:
self.item = gtk.MenuItem()
self.item.add(gtk.Entry())
self.menu.append(self.item)
Wenn self.menu ein appindicator.Indicator ist, wird der Eintrag zumindest angezeigt, wenn es sich um ein gtk.Menu handelt.
Hier ist ein funktionierender 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()