Menempatkan gtk yang sewenang-wenang. Letakkan di appindicator.Indicator


18

Menempatkan gtk. Letakkan di dalam gtk.Menu berfungsi, agaknya, dengan meletakkan gtk.MenuItem kosong terlebih dahulu. Tampaknya tidak dapat diandalkan - tetapi pada dasarnya berfungsi. Dengan appindicator.Indicator, itu tidak berfungsi. Entri tetap kosong. Bahkan jika Anda mengatur anak [border_size] ke 32, misalnya.

Satu-satunya widget yang berfungsi adalah gtk.Label (plus MenuItem, ImageMenuItem dan sebagainya tentu saja).

Sekarang Menu Me punya gtk. Masukkan di dalamnya, jadi pasti harus melakukan ini dengan benar. Bagaimana saya melakukannya?

Berikut beberapa contoh kode untuk menjelaskan tentang apa yang saya maksud:

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

Kode di atas berfungsi, namun ini tidak:

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

Di mana self.menu adalah appindicator.Indicator, jika itu adalah gtk.Menu, Entri akan setidaknya ditampilkan.

Ini beberapa kode yang berfungsi:

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()

Seperti @MarcoCeppi mengingatkan saya, ya - ini tidak seharusnya bekerja. Saya hanya berharap dan bermimpi, mungkin bisa. Karena Me Menu melakukan sesuatu yang mirip.
Stefano Palazzo

1
Saya cukup yakin bahwa Me Menu menggunakan libido (Indicator Display Objects) untuk melakukan itu. Lihat: launchpad.net/ido Secara khusus, idoentrymenuitem.c ( bazaar.launchpad.net/~canonical-dx-team/ido/trunk/annotate/… ). Sayangnya, saya tidak berpikir ada binding python. Anda mungkin ingin bertanya pada daftar email ayatana-dev.
andrewsomething

Apakah Anda mengetahui cara melakukan ini? Saya menghadapi masalah yang sama. Terima kasih.
Benjamin

Jawaban:


7

Dukungan menu Application Indicator didasarkan pada menu D-Bus, yang terbatas pada apa yang mereka dukung - mereka hanya mendukung fungsionalitas menu dasar, bukan hal-hal yang lebih eksotis seperti widget sewenang-wenang.

Satu hambatan besar bagi mereka yang pernah mendukung hal-hal semacam itu adalah kenyataan bahwa menu indikator aplikasi diberikan oleh proses yang berbeda, proses indikator aplikasi, sehingga program Anda tidak memiliki akses untuk secara langsung menggambar apa pun di atasnya. Untuk mengatasinya, diperlukan sesuatu yang mendukung seperti X-Embed di menu D-Bus atau memungkinkan semua GTK bekerja di D-Bus.


2

Indikator suara di Ubuntu memiliki slider untuk volume dan saya bertanya-tanya bagaimana itu mungkin. Setelah melihat kode itu, sepertinya ada GtkMenus yang dapat diisi melalui dbus sementara itu: https://developer.ubuntu.com/api/devel/ubuntu-12.04/c/dbusmenugtk/index.html

Tapi saya tidak tahu bagaimana menggunakannya. Ingin menulis indikator suara di mana saya dapat mengontrol volume per-aplikasi seperti halnya pavucontrol dapat melakukannya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.