Периодически вызывать функцию в основном цикле пигтка

Что такое эквивалент pygtk для метода after в tkinter?

Я хочу периодически вызывать функцию в основном цикле.

Каков лучший способ достичь этого?

2 Solutions collect form web for “Периодически вызывать функцию в основном цикле пигтка”

Используйте gobject.timeout_add :

import gobject gobject.timeout_add(milliseconds, callback) 

Например, вот индикатор выполнения, который использует timeout_add для обновления значения прогресса ( HScale ):

 import gobject import gtk class Bar(object): def __init__(self,widget): self.val=0 self.scale = gtk.HScale() self.scale.set_range(0, 100) self.scale.set_update_policy(gtk.UPDATE_CONTINUOUS) self.scale.set_value(self.val) widget.add(self.scale) gobject.timeout_add(100, self.timeout) def timeout(self): self.val +=1 self.scale.set_value(self.val) return True if __name__=='__main__': win = gtk.Window() win.set_default_size(300,50) win.connect("destroy", gtk.main_quit) bar=Bar(win) win.show_all() gtk.main() 

Если вы используете новый API-интерфейс Introspection Python GObject , вы должны использовать GLib.timeout_add() .

Обратите внимание, что документация кажется неправильной. Это на самом деле:

timeout_add (интервал, функция, * 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> 
  • Каков новейший способ разработки апплетов панели gnome (с использованием python)
  • Socket Thread и PyGTK
  • Как захватить выбранную строку и столбец в TreeView в PyGTK?
  • Щелкните правой кнопкой мыши на PyGTK Hbox в расширителе
  • Как получить прозрачный фон в окне с PyGTK и PyCairo?
  • _really_ disable Поиск GtkTreeView
  • Как подключиться к сигналу GObject в python, не сохраняя ссылки на соединитель?
  • Как сделать редактируемый столбец для конкретного ребенка в pygtk
  • Борьба за установку пигтта с пипсом
  • ImportError: нет модуля с именем _backend_gdk
  • Проверьте, находится ли окно на текущем рабочем столе?
  • Python - лучший язык программирования в мире.