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()
Jawaban:
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.
sumber
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.
sumber