How to run function 5 seconds after pygtk widget is shown?
+6
A:
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
2009-08-20 22:49:06
great answer.
nosklo
2009-08-21 02:38:17
+1
A:
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(!)
kaizer.se
2009-08-20 23:30:22