PYGTK - PYGI: gtk.timeout_add eşdeğeri


9

PYGI kullanmak için bazı Python kodunu dönüştürdüm ama bu satırı dönüştürmek nasıl anlayamıyorum:

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

Açıkçası, PYGTK ve PYGI arasındaki farkı gerçekten bilmediğim için, yeni kodum

from gi.repository import Gtk
from gi.repository import AppIndicator3 as appindicator

burada gösterildiği gibi https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Python_version

Dönüştürmeye çalıştığım kodun tamamı http://pastebin.com/raw.php?i=aUtASRpy

Eşdeğeri nedir

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

PYGI?

Ayrıca PYGI'nin birlik göstergesi yapmanın en modern yolu olduğunu varsayıyorum

Ayrıca göstergeye durumu anlatmak için bir şey yerine göstergenin durumunu kontrol etmenin en iyisi olduğunu varsayıyorum (itme vs çekme). Her saniyede bir şeyleri kontrol eden bir python programının olması uygun mudur?

Teşekkürler!

Yanıtlar:


1

Her soru için bir soru sormak daha iyidir.

Python'un standart kütüphanesinde tam olarak ihtiyacınız olanı yapan threadingbir Timersınıfa sahip bir modül bulunur . Belgeler .

Push vs pull ile ilgili olarak - uygulamanız bir şey olduğunda (push) her saniyede bir şey olup olmadığını kontrol etmek yerine (push) - "henüz var mıyız? Henüz yok muyuz? . "- çünkü her saniye aynı yinelenen kontrolü yapmak yerine uygulamanızın bildirimde bulunana kadar hiçbir şey yapmasına izin vermez. Ancak, bazı etkinlik türleri için bildirim almak zor olabilir, bu nedenle başvurunuzun niteliğine bağlıdır. Kontrolleri çok sık yapmak pil ömrü ve diğer şeyler için de kötüdür.


Teşekkür ederim, bu kurşun bana bu arada kesmek için pastebin.com/raw.php?i=0jLxZ994 büyük yardımıyla stackoverflow.com/questions/9812344/... ile beri dinleyici çeşit yapmak öğrenmek Fakat, şimdi zaman neyi "Anketler" in çoğunluğunun hiçbir şeyin değişmediğini keşfedeceğini düşünüyorum, ama bu başka bir zaman. Teşekkürler!
onBootQuestioner

19

Bir cevapta Gtk yolunun da mevcut olduğundan emin olmak için:

Eşdeğeri

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

gobject introspection'da (PyGI):

from gi.repository import GLib
GLib.timeout_add(PING_FREQUENCY * 1000, self.doWork)

Ancak, her x saniyede bir düzenli olarak bir şey kontrol ederken,

GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)

Bu, Glib'in zamanlayıcıları gruplandırmasına ve dolayısıyla mobil cihazlar için önemli olan güçten tasarruf etmesine olanak tanır. Gönderen belgeler :

Aynı anda ateş etmek için zamanlayıcıların gruplanması daha fazla güç ve CPU verimli davranışa neden olur, bu nedenle zamanlayıcınız birkaç saniyede ise ve ilk zamanlayıcıyı tam olarak bir saniye sonra istemiyorsanız, glib.timeout_add_seconds ( ), glib.timeout_add () yerine tercih edilir.


4
Bu, iplik geçirmekten çok daha iyi görünüyor. Özellikle ne yaptığınızı gerçekten bilmiyorsanız, diş çekme tuhaf hatalara ve kilitlenmelere neden olabileceğinden.
Timo
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.