web-dev-qa-db-ja.com

PYGTKからPYGI:gtk.timeout_addと同等

いくつかのPythonコードをPYGIを使用するように変換しましたが、この行を変換する方法がわかりません。

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

明らかに、PYGTKとPYGIの違いはよくわからないので、私の新しいコードは

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

ここに示されているように https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Python_version

私が変換しようとしている完全なコードはこちらです http://Pastebin.com/raw.php?i=aUtASRpy

同等のものは何ですか

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

pYGIで?

また、PYGIが統一インジケーターを作成する最も現代的な方法であると仮定しています

また、インジケーターに状態を知らせるのではなく、インジケーターの状態を確認するのが最善であると想定しています(プッシュvsプル)。 pythonプログラムで毎秒何かをチェックしても大丈夫ですか?

ありがとう!

9

質問ごとに1つの質問をすることをお勧めします。

Pythonの標準ライブラリにはthreadingモジュールがあり、Timerクラスが必要なことを正確に実行します。 ドキュメント

プッシュとプルについて-何かが毎秒発生したかどうかを確認する(プル)のではなく、何かが発生したとき(プッシュ)にアプリケーションが通知を受信する方が間違いなく優れています-「まだありますか? 。 "-毎秒同じ繰り返しチェックを行うのではなく、アプリがスリープ状態になり、通知されるまで何もしないためです。ただし、一部の種類のアクティビティでは通知を取得するのが難しい場合があるため、アプリケーションの性質によって異なります。あまりにも頻繁にチェックを行うと、バッテリーの寿命などに悪影響を及ぼします。

1
Sergey

答えにGtkの方法が存在することを確認するためだけに:

と同等

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

gobjectイントロスペクション(PyGI)で:

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

ただし、x秒ごとに何かを定期的にチェックする場合は、

GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)

これにより、Glibはタイマーをグループ化して電力を節約できます。これはモバイルデバイスにとって重要です。 ドキュメント から:

同時に起動するタイマーをグループ化すると、電力とCPUの効率的な動作が向上するため、タイマーが秒の倍数であり、1秒後に最初のタイマーを必要としない場合、glib.timeout_add_seconds( )は、glib.timeout_add()よりも優先されます。

19
xubuntix