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

Что такое эквивалент 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> 
  • Как обновить / перерисовать виджет GTK (GTKLabel) внутри без нажатия клавиши с помощью python?
  • Какая самая популярная библиотека GUI для Python в Windows?
  • Python & PyGTK: остановка при нажатии кнопки
  • Каталоги каталогов Gettext из виртуального каталога в PYZ для виджетов GtkBuilder
  • Выполнение вычислений в фоновом потоке python / pygtk
  • Виджет gtk TextView не обновляется во время работы
  • Как добавить элемент в список недавно добавленных файлов GTK из Python?
  • Можно ли нарисовать GtkTreeView, как GtkIconView?
  •  
    Interesting Posts for Van-Lav

    Панды читают в таблице без заголовков

    matplotlib.pyplot против matplotlib.pylab

    Django cursor.execute (QUERY) намного медленнее, чем запуск запроса в базе данных postgres

    Как изменить версию python по умолчанию на Linux-машине? (А не только символическую ссылку)

    Запуск пауков Scrapy в задаче Сельдерея

    Что делает urllib2.Request (<url>) и как мне его распечатать / просмотреть?

    Есть ли способ программно прочитать файл с диска TrueCrypt в память?

    Самый быстрый способ генерации большой случайной строки с более низкими латинскими буквами

    Флакон WTForms: разница между DataRequired и InputRequired

    Как Python (или MonkeyRunner) находит импортированные модули?

    Разделение строки с использованием разделителей пространства и максимальной длины

    Есть ли способ прочитать файл в цикле в python, используя разделитель, отличный от новой строки

    Как проверить разницу в секундах между двумя датами?

    Python: Разделить список в массиве

    Разница между «рейзом» и «повышением e»?

    Python - лучший язык программирования в мире.