PYGTK tới PYGI: tương đương gtk.timeout_add


9

Tôi đã chuyển đổi một số mã Python để sử dụng PYGI nhưng tôi không thể tìm ra cách chuyển đổi dòng này:

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

Nói rõ hơn, vì tôi không thực sự biết sự khác biệt giữa PYGTK và PYGI, mã mới của tôi sử dụng

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

như được hiển thị ở đây https://wiki.ubfox.com/DesktopExperienceTeam/ApplicationIndicators#Python_version

Mã đầy đủ tôi đang cố gắng chuyển đổi ở đây http://pastebin.com/raw.php?i=aUtASRpy

Tương đương với

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

trong PYGI?

Tôi cũng cho rằng PYGI là cách hiện đại nhất để tạo ra một chỉ số thống nhất

Tôi cũng giả định rằng tốt nhất là chỉ báo kiểm tra trạng thái của một thứ gì đó chứ không phải là một cái gì đó để báo cho chỉ báo trạng thái (đẩy so với kéo). Có ổn không khi có một chương trình python kiểm tra một cái gì đó mỗi giây?

Cảm ơn!

Câu trả lời:


1

Nó là tốt hơn để hỏi một câu hỏi cho mỗi ... err ... câu hỏi.

Thư viện chuẩn của Python có threadingmô-đun có một Timerlớp thực hiện chính xác những gì bạn cần. Tài liệu .

Về đẩy và kéo - chắc chắn sẽ tốt hơn khi ứng dụng của bạn nhận được thông báo khi có sự cố xảy ra (đẩy) thay vì kiểm tra xem có chuyện gì xảy ra mỗi giây (kéo) - "chúng ta đã ở đó chưa? Chúng ta đã ở đó chưa? . "- bởi vì nó cho phép ứng dụng của bạn chỉ ngủ và không làm gì cho đến khi được thông báo, trái ngược với việc kiểm tra lặp lại tương tự mỗi giây. Tuy nhiên, điều này là đối với một số loại hoạt động, có thể rất khó để nhận được thông báo, vì vậy nó phụ thuộc vào bản chất của ứng dụng của bạn. Kiểm tra quá thường xuyên cũng có hại cho tuổi thọ pin và những thứ khác.


Cảm ơn bạn, điều này dẫn tôi đến việc hack cùng pastebin.com/raw.php?i=0jLxZ994 này với sự trợ giúp lớn từ stackoverflow.com/questions/9812344/. Nhưng, giờ là lúc để tìm hiểu cách tạo ra một số trình nghe Tôi nghĩ rằng phần lớn các "cuộc thăm dò" sẽ phát hiện ra rằng không có gì thay đổi, nhưng, đó là cho một thời điểm khác. Cảm ơn!
onBootQuestioner

19

Chỉ để đảm bảo rằng cách Gtk cũng có mặt trong một câu trả lời:

Tương đương với

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

trong phần giới thiệu của gobject (PyGI) là:

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

Tuy nhiên, khi kiểm tra thứ gì đó thường xuyên cứ sau x giây, bạn nên sử dụng

GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)

Điều này cho phép Glib phân nhóm bộ hẹn giờ và do đó tiết kiệm năng lượng, điều này rất quan trọng đối với các thiết bị di động. Từ tài liệu :

Việc nhóm các bộ định thời kích hoạt cùng một lúc sẽ tạo ra hoạt động hiệu quả hơn về năng lượng và CPU, do đó, nếu bộ định thời của bạn có nhiều giây và bạn không yêu cầu bộ hẹn giờ đầu tiên chính xác một giây kể từ bây giờ, hãy sử dụng glib.timeout_add_seconds ( ) được ưa thích hơn glib.timeout_add ().


4
Điều này có vẻ tốt hơn so với sử dụng luồng. Đặc biệt là khi xâu chuỗi có thể gây ra lỗi và khóa lạ nếu bạn không thực sự biết mình đang làm gì.
Timo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.