Poner un gtk.Widget arbitrario en un appindicator.Indicator

18

Poner cualquier gtk.Widget dentro de un gtk.Menu funciona, de alguna manera, al poner un gtk.MenuItem vacío primero. No parece ser confiable, pero básicamente funciona. Con un appindicator.Indicator, no funciona. La entrada simplemente permanece vacía. Incluso si establece el elemento secundario [border_size] en 32, por ejemplo.

El único widget que funciona es un gtk.Label (más el MenuItem, ImageMenuItem, etc.) por supuesto.

Ahora el menú Me tiene una entrada gtk.in, así que seguramente debe ser posible hacerlo correctamente. ¿Cómo lo hago?

Aquí hay un código de ejemplo para explicar de qué estoy hablando:

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

El código anterior funciona, pero esto no:

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

Donde self.menu es un appindicator.Indicator, si fuera un gtk.Menu, al menos se mostraría la entrada.

Aquí hay un código de trabajo:

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()
    
pregunta Stefano Palazzo 06.12.2010 - 14:25

2 respuestas

7

El soporte del menú del Indicador de la aplicación se basa en los menús de D-Bus, que están limitados en lo que admiten: solo admiten la funcionalidad básica del menú, no elementos más exóticos como widgets arbitrarios.

Un obstáculo significativo para ellos es que el menú indicador de la aplicación se procesa mediante un proceso diferente, el proceso indicador de la aplicación, por lo que su programa no tiene acceso para extraer directamente nada sobre él. Superar esto requeriría apoyar algo como X-Embed en los menús de D-Bus o permitir que todo GTK funcione a través de D-Bus.

    
respondido por el Michael Ekstrand 06.12.2010 - 14:46
2

El indicador de sonido en Ubuntu tiene controles deslizantes para el volumen y me pregunté cómo es posible. Después de echar un vistazo al código, parece que hay GtkMenus que puede llenarse mediante dbus mientras tanto: enlace

Pero no sé cómo usarlos. Quería escribir un indicador de sonido donde pueda controlar el volumen por aplicación al igual que pavucontrol puede hacerlo.

    
respondido por el c_korn 24.04.2016 - 00:15

Lea otras preguntas en las etiquetas