12

How to run function 5 seconds after pygtk widget is shown?

Jan Tojnar
  • 5,306
  • 3
  • 29
  • 49

2 Answers2

16

You can use glib.timeout_add(interval, callback, ...) to periodically call a function.

If the function returns True then it will be called again after the interval; if the function return False then it will not be called again.

Here is a short example of adding a timeout after a widget's show event:

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()
Karl Voigtland
  • 7,637
  • 34
  • 29
9

If the time is not critical to be exact to the tenth of a second, use

glib.timeout_add_seconds(5, ..)

else as above.

timeout_add_seconds allows the system to align timeouts to other events, in the long run reducing CPU wakeups (especially if the timeout is reocurring) and save energy for the planet(!)

u0b34a0f6ae
  • 48,117
  • 14
  • 92
  • 101