Запуск функции через 5 секунд после отображения виджета pygtk - PullRequest
11 голосов
/ 21 августа 2009

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

Ответы [ 2 ]

14 голосов
/ 21 августа 2009

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

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

Вот краткий пример добавления таймаута после события 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()
9 голосов
/ 21 августа 2009

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

glib.timeout_add_seconds(5, ..)

остальное, как указано выше.

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

...