Запуск функции через 5 секунд после появления виджета pygtk

Как запустить функцию через 5 секунд после отображения виджета pygtk?

Ответ 1

Вы можете использовать glib.timeout_add (интервал, обратный вызов,...), чтобы периодически вызывать функцию.

Если функция возвращает True, она будет вызываться снова после интервала; если функция возвращает False, то она не будет вызываться снова.

Вот краткий пример добавления тайм-аута после события showget show:

import pygtk
pygtk.require('2.0')
import gtk
import glib

def timer_cb():
    print "5 seconds elapsed."
    return False

def show_cb(widget, data=None):
    glib.timeout_add(5000, timer_cb)

def destroy_cb(widget, data=None):
    gtk.main_quit()

def main():
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)

    window.connect("show", show_cb)

    window.connect("destroy", destroy_cb)

    window.show()

    gtk.main()

if __name__ == "__main__":
    main()

Ответ 2

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

glib.timeout_add_seconds(5, ..)

else, как указано выше.

timeout_add_seconds позволяет системе выровнять тайм-ауты с другими событиями, в конечном итоге уменьшая пробуждения процессора (особенно, если тайм-аут повторяется) и экономить энергию для планеты (!)