Mettere un gtk.Widget arbitrario in un appindicator.Indicator

18

Mettere qualsiasi gtk.Widget all'interno di un gtk.Menu funziona, in qualche modo, mettendo prima un gtk.MenuItem vuoto. Non sembra affidabile, ma fondamentalmente funziona. Con un appindicator.Indicator, non funziona. La voce rimane vuota. Anche se si imposta il figlio [border_size] su 32, ad esempio.

L'unico widget che funziona è gtk.Label (più MenuItem, ImageMenuItem e così via ovviamente).

Ora il Me Menu ha un gtk.Entry in esso, quindi deve essere sicuramente possibile farlo correttamente. Come faccio?

Ecco alcuni esempi di codice per spiegare di cosa sto parlando:

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

Il codice sopra funziona, tuttavia non lo è:

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

Dove self.menu è un appindicator.Indicator, se fosse un gtk.Menu, la voce sarà almeno visualizzata.

Ecco alcuni codici funzionanti:

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()
    
posta Stefano Palazzo 06.12.2010 - 15:25

2 risposte

7

Il supporto del menu Indicatore applicazione si basa sui menu D-Bus, che sono limitati in ciò che supportano, supportano solo le funzionalità di base del menu, non più cose esotiche come i widget arbitrari.

Un ostacolo significativo per loro è che il menu dell'indicatore dell'applicazione è reso da un processo diverso, il processo dell'indicatore dell'applicazione, quindi il tuo programma non ha accesso per disegnare direttamente qualcosa su di esso. Per ovviare a questo, è necessario supportare qualcosa come X-Embed nei menu D-Bus o consentire a GTK di funzionare su D-Bus.

    
risposta data Michael Ekstrand 06.12.2010 - 15:46
2

L'indicatore del suono in Ubuntu ha cursori per il volume e mi sono chiesto come sia possibile. Dopo uno sguardo nel codice sembra ci siano GtkMenus che possono essere riempiti via dbus nel frattempo: link

Ma non so come usarli. Volevo scrivere un indicatore sonoro in cui posso controllare il volume per-app, proprio come Pavucontrol può farlo.

    
risposta data c_korn 24.04.2016 - 02:15

Leggi altre domande sui tag