Ubuntu'da ve diğer dağıtımlarda görüntülenecek bir durum simgesi nasıl programlanır?


23

Söz konusu uygulama bazı eylemler gerçekleştiriyor (burada sesi ağ akışlarına bağlamak) ve bu işlemler başarılı olursa en aza indirgeniyor. Bu nedenle, bağlantının durumunu görüntülemek için bir durum simgesine ihtiyaç duyulur (örn. BAĞLANTI / BAĞLANTI YOK). Sadece simgeye tıklandığında uygulama penceresi diğer seçeneklere erişim sağlamak için açılacaktır.

Python 2.6 ve pyGtk kullanarak bunu gtk_status_icon kullanarak rahatça gerçekleştirdim . Uygulamayı, çeşitli Ubuntu sürümleri de dahil olmak üzere mümkün olduğu kadar çok dağıtımda çalışacak şekilde yazdım. Olası bağımlılıkları sadece kullanıcı kurduktan sonra kullanmaya özen gösterdim.

Ancak şimdi gtk_status_icon'un gelecek Ubuntu sürümlerinde artık desteklenmeyeceğini duydum. Geliştiricilerin bunun yerine Uygulama Göstergelerini kullanmaları istenir. Bundan emin olmak için en iyi uygulama nedir?

  1. Uygulamanın yerel simgeleri düzgün görüntüleniyor
  2. Uygulama çalışmaya devam edecek ve gelecekteki Ubuntu sürümlerinde simgeleri gösterecektir.
  3. Uygulama olacak da çalıştırabilir ve diğer ortamlarda 's simgeleri görüntüler gösterge-applet , libappindicator ve piton-appindicator verilmez.

Gösterge-uygulama çalışmıyorsa, gtk_status_icon'un Uygulama Göstergesi geri dönüş mekanizmaları çalışmayacaktır. İçe aktarılacak appindicator modülü yoksa Python tercümanları çalışmayacaktır . Farklı dağıtımlar için farklı sürümler geliştirmem gerekiyor mu yoksa bunun için daha iyi bir yol var mı?

ApplicationIndicator'ın nasıl kullanılacağı hakkında Ubuntu Wiki’de verilen örnekten başka bir belge bulabilirim ? Ubuntu ile Ubuntu olmayan dağıtımlar için farklı kaynak kodlarının programlanmasını önlemek için gösterge uygulamasının çalışıp çalışmadığını kontrol etmek için hangi komutlar sağlanmıştır?

Yanıtlar:


16

Buradaki ihtiyacın aslında python-appindicator kütüphanesinin daha belirleyici olduğunu düşünüyorum. Eğer varsa, ihtiyacınız olan tüm geri dönüş durumlarını destekleyecektir. XFCE, KDE ve daha eski GNOME'ları uygun şekilde idare edecek. Bu cevapta nasıl yapılacağına güzel bir örnek .

Appindicator kütüphanesi, uygulama gösterge oluşturma işleminin mevcut olup olmadığını kontrol etmek için DBus'u kullanacaktır. Bu Birlik'te veya gösterge uygulaması çalışıyorsa böyle olacaktır. Eğer mevcutsa, onu kullanacaktır, eğer değilse, aynı menü ile bir GtkStatusIcon kullanmaya geri dönecektir.

Ne yazık ki, kütüphanenin kullanılamaması durumunu ele almak istiyorsanız her iki kod yolunu da saklamanız gerektiğine inanıyorum. Yine de, kütüphaneyi diğer dağıtımlarda bulmana yardımcı olmaktan memnuniyet duyarız :)


Bu çok net cevap için teşekkür ederim. Bu, uygulamamın 11.04'te çalışmasını istersem gitmem gereken yolu işaret eder. GtkStatusIcon için bir çalışma yolum var ama gösterge-uygulama için her şeyi tekrar geliştirmem gerekecek. # 668375 numaralı hataya yorumunuzu anladıysam, bir simge teması oluşturmak zorunda kalmadan yerel simgelerimi kullanabilirim, değil mi?
Takkat

AppIndicator programlamaya dalmak için zamanım oldu, appindicator modülünü kontrol etmek için jgoguen'in önerisini kullanmanın gerçekten yardımcı olmadığını, çünkü özel Icons 10.04 LTS'de oluşturmadığını gördüm. # 668375 numaralı hataya yorumlarımı gör.
Takkat

Cevabım bu sorunu çözmek için çok kolay bir yol içerir. Benim app için çok iyi çalıştı ve hatta Windows için AppIndicators kullanan bir uygulamayı taşımak için acısız yaptı!
Nathan Osman

10

StackApplet'te iyi çalışan mükemmel bir çözüme sahibim - Gerçek modül olmadığında aynı işlevselliği sağlamak appindicatoriçin gtk.StatusIcondahili olarak kullanan modülün işlevsel olarak eşdeğer bir versiyonunu yarattım .

Bunu kullanmak kadar basittir:

  1. Aşağıdaki dosyayı indirip arayınappindicator_replacement.py
  2. Aşağıdakileri uygulamanıza ekleyin:

    try:
        import appindicator
    except ImportError:
        import appindicator_replacement as appindicator

Bu kadar! Artık, uygulamanız AppIndicators desteği ile veya desteği olmadan mükemmel şekilde çalışacaktır. Platforma özel başka bir kodunuz olmadığını varsayarak Windows üzerinde de çalışacaktır.


Not: dosya MIT lisansı altında yayınlanmıştır - böylece herhangi bir şey için hemen hemen kullanabilirsiniz.


9

Her ikisi için de kod yazmanız gerekecek. Python kodunuzdaki appindicator varlığını benzer bir şey kullanarak tespit edebilirsiniz:

have_appindicator = True
try:
    import appindicator
except:
    have_appindicator = False

Oradan appindicator kodunu veya gtk_status_icon kodunu kullanıp kullanmamaya karar vermek için have_appindicator kullanın.

Ne yazık ki, bu aynı zamanda hem bir Ubuntu'ya hem de test etmek için başka bir ortama ihtiyacınız olacağı anlamına gelir.


1
Yine de, python-appindicator'un kurulu olduğu ancak gösterge uygulamasının çalışmadığı ortamlar olabilir . Uygulamanın da bunu ele alması gerekecek.
Takkat

Bu durumda, bkz. Wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators > Özel Geri Dönüşler . Gösterge uygulaması yoksa, varsayılan olarak uygulama göstergesi için bir gtk.StatusIcon alırsınız.
htorque

Yedekleme seçeneğinin farkındayım. Anlamadığım şey, gösterge uygulaması çalışmıyorsa, gösterge uygulaması nasıl bir geri dönüş sağlayabilir?
Takkat

İndikatör-applet'i basitçe kontrol ettiğini ve sahne arkasında gtk_status_icon işlevini sağladığını hayal ediyorum.
jgoguen

1
@jgoguen: "bu" nedir? Ben 11.04 dan Ubuntu / Birlik anlıyorum değil artık gtk_status_icon destekler. Diğer dağıtımlarda "o" olmayabilir. Bunun için gerçekten endişeleniyorum.
Takkat

3
for line in os.popen("ps xa"): 
fields = line.split() 
pid = fields[0] 
process = fields[4]

applet_is_running = ( process.find('indicator-applet') > 0 )

Bu şekilde gösterge uygulamasının çalışıp çalışmadığını tespit edebilirsiniz. Ubuntu 11.04 hakkında endişelenmenize gerek yok çünkü durum böyle olmayacak. Geri dönüş senaryosu yoktur, çünkü gösterge-applet, varsayılan olarak çalışan zorunlu bir bileşendir.


Gösterge uygulamasının PID'sine sahip olduğunuzu gösterdiğiniz için teşekkür ederiz (bunu zaten pidof kullanarak mümkün olan diğer bağımlılıklar için yapıyorum), bu daha iyi bir şey yoksa, kuşkusuz daha az zarif bir yöntem olacaktır. Gördüğüm kadarıyla gösterge-applet, yalnızca donanım gereksinimleri karşılandığında birlik ile güvenilir bir şekilde çalışıyor. Kullanıcılar 2D GNOME'a önyükleme yapabilecektir ve gösterge-uygulamayı çalıştırmamaya karar verebilirler. Ancak bu o zaman benim sorunum değil.
Takkat

Size 'zarif' olamayacağına katılıyorum (ancak istediğiniz tüm kozmetik ürünleri ekleyebilirsiniz: D) ancak çalışması gerekir. Şahsen iyi çalışan çözümleri tercih ediyorum ve zerafet ikinci sırada geliyor :)
OpenNingia

Bu görev 14.04 sistemimde çalışmıyor gibi görünüyor. Yaklaşım kaldırıldı mı? /usr/lib/x86_64-linux-gnu/indicator-messages/indicator-messages-serviceBunun yerine birçok görev var.
halfer
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.