PYGTKからPYGI:同等のgtk.timeout_add


9

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

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がユニティインジケーターを作成する最も近代的な方法であると想定しています。

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

ありがとう!

回答:


1

質問ごとに1つの質問をするのが良いです。

Pythonの標準ライブラリthreadingには、Timer必要な機能を正確に実行するクラスを持つモジュールがあります。ドキュメンテーション

プッシュとプルについて-1秒ごとに何かが起こったか(プル)をチェックする代わりに、何かが起こった(プッシュ)ときにアプリケーションが通知を受け取るほうが確実に優れています。 。 "-毎秒同じ繰り返しチェックを行うのではなく、通知を受けるまでアプリをスリープ状態にし、何もしないようにするためです。ただし、アクティビティの種類によっては、通知を受け取るのが難しい場合があるため、アプリケーションの性質によって異なります。頻繁にチェックを行うと、バッテリーの寿命などに悪影響を及ぼします。


ありがとう、このリード私は一緒にこのハックするpastebin.com/raw.php?i=0jLxZ994をから大きな助けとstackoverflow.com/questions/9812344/... 何で以来、リスナーのいくつかの並べ替えを作成する方法を学習する時間になりました、しかし、大多数の「世論調査」は何も変わっていないことに気づくでしょうが、それはまた別の時のためです。ありがとう!
onBootQuestioner 2012

19

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()よりも優先されます。


4
これは、スレッドを使用するよりもはるかに良いようです。特に、スレッドが本当に何をしているのかわからないと、奇妙なバグやロックアップを引き起こす可能性があるためです。
Timo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.