Python ile Uygulama Göstergelerinde Gtk.Widgets Kullanımı


44

2010 yılında Stefano Palazzo, konuyla ilgili bir soru sordu, keyfi bir gtk koydu.Bir appindicator.Indicator içine yazın ve benzer bir StackOverflow sordu . Her iki durumda da, fikir birliği Ubuntu'nun Uygulama Göstergelerinin sınırlı olduğu yönündedir. Michael Ekstrand'ın söylediği gibi:

Uygulama Göstergesi menü desteği, destekledikleri şeylerle sınırlı olan D-Bus menülerine dayanır - bunlar yalnızca temel menü işlevlerini destekler, isteğe bağlı gereçler gibi daha egzotik şeyleri değil.

Bununla birlikte, 2016'da bugün Bluetooth göstergesinde gördüğümüzle çelişiyor: geçiş düğmelerini kullanıyor.

görüntü tanımını buraya girin

Aynı 13.04'ten itibaren Ubuntu One göstergesiyle de gözlemlenebilir:

görüntü tanımını buraya girin

Yani belli ki bir yolu var. Gösterge-bluetooth kaynak kodunu okudum, ancak Vala'da yazılmış. Bununla birlikte, öncelikle python ile çalışıyorum ve Vala'yı sadece mevcut tüm göstergelerimi yeniden yazmak için öğrenmek biraz fazla iş.

Peki, sorunun özü: Kişi Python kullanarak Gtk.Widgets'i veya en azından Bluetooth göstergesindeki gibi bir geçiş anahtarını nasıl kullanabilir?

NOT : Python'da çalışacak bir örnek verecek bir cevabı ödüllendirmek için bu soruya lütfetmek istiyorum . Diğer diller kabul edilmez.


6
Uygulama göstergesi, sinek üzerindeki simgeyi desteklemese bile sınırlıdır (yalnızca görüntü dosyasını dosya sisteminden yükler). Bahsettiğiniz göstergeler SİSTEM göstergeleridir (bluetooth, ubuntu one, ses, güç, ...). Farklılar ve libappindicator kullanmıyorlar. Aradaki farkı açıklığa kavuşturmaya yardımcı olabilecek birkaç yazı yayınladım. Zaten C kullanarak çalışan bir sistem göstergesi var ama python içinde hala mücadele ediyorum.
user.dz

2
Ubuntu'nun çekirdek geliştiricilerinin dikkatini bu soruya çekmenin bir yolu var mı?
don.joey

1
En azından test = Gtk.CheckMenuItem("Monkey")bir buton ekleyerek çalışıyor, fakat daha fazlası olmalı. Bu bir eser olsa da, bu bir olmalıdır çalışmak değil yapar: Gtk.CheckMenuItemToggled("Monkey"). Her halükarda işe yarayacağından eminim. Bakınız: developer.gnome.org/gtk3/stable/GtkCheckMenuItem.html
Jacob Vlijm

1
@JacobVlijm evet, herhangi bir tek menuitem eklemek işe yarıyor, aynı zamanda bir Gtk.Box eklemek ve bu kutuya Gtk.Label'i eklemek de işe yarıyor, fakat başka bir şey yok (widget'in sadece bir öğe içerebileceğini söylüyor.
Sergiy Kolodyazhnyy

1
Gtk.ImageMenuItemkaldırılmış ve Btw kullanmanız önerilmez: developer.gnome.org/gtkmm/stable/deprecated.html
Jacob Vlijm

Yanıtlar:


1

Bu sorun, AppIndicators bir gösterge menüsü oluşturmayı kolaylaştırırken, bir tane oluşturmanın yolunu bulduğu için var. AppIndicator kullanarak örnek python kodu ve Bluetooth kodunun yaptığı gibi GLib Menülerinden birini kullanarak arasındaki farkı inceleyelim.

Öncelikle yapmanız gerekenler gtk.Menu, bunlar Gtk.Actionartık kullanımdan kaldırılmış eski stil Gtk menü nesneleridir . AppIndicator işlemi gtk.Menusırasında sizden nesneyi alır set_menu(...)ve ayrıştırır, bulduğu menüleri kullanarak oluşturulan gösterge servisine iter libdbusmenu. Bu ayrıştırma işlemi, ne yaparsanız yapın AppIndicator tarafından desteklenmeyen herhangi bir şeyin filtreleneceği anlamına gelir.

Daha sonra Bluetooth menüsüne bakalım. Bu Gio.Menunesneler kullanılarak yaratılmıştır , bunlar GActionsistemi kullanan yeni stil Gnome menüleridir . Daha sonra o kullanmadan kendi hizmet var kayıtlı AppIndicatorveya libdbusmenuve seti bir özel kullanarak kalmış bulunuyor x-canonical-typegeçirilir anahtar aracı oluşturmak için özellik libidoayrıştırma için.

Bütün bu alıştırma oldukça kötü, çünkü hepsi Canonical'in kendi Birlik özelleştirmeleri. Böylece birlik gider gitmez, hiçbir şekilde belirteç yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.