Если вы используете новый Python GObject Introspection API , вы должны использовать GLib.timeout_add()
.
Обратите внимание, что документация кажется неверной. Это на самом деле:
timeout_add(interval, function, *user_data, **kwargs)
Вот пример. Обратите внимание, что run
является вызываемым объектом, но это может быть любая обычная функция или метод.
from gi.repository import GLib
class Runner:
def __init__(self, num_times):
self.num_times = num_times
self.count = 0
def __call__(self, *args):
self.count += 1
print("Periodic timer [{}]: args={}".format(self.count, args))
return self.count < self.num_times
run = Runner(5)
interval_ms = 1000
GLib.timeout_add(interval_ms, run, 'foo', 123)
loop = GLib.MainLoop()
loop.run()
Выход:
$ python3 glib_timeout.py
Periodic timer [1]: args=('foo', 123)
Periodic timer [2]: args=('foo', 123)
Periodic timer [3]: args=('foo', 123)
Periodic timer [4]: args=('foo', 123)
Periodic timer [5]: args=('foo', 123)
<messages stop but main loop keeps running>