Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running function 5 seconds after pygtk widget is shown

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

like image 280
Jan Tojnar Avatar asked Aug 20 '09 21:08

Jan Tojnar


2 Answers

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()
like image 181
Karl Voigtland Avatar answered Nov 15 '22 23:11

Karl Voigtland


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(!)

like image 28
u0b34a0f6ae Avatar answered Nov 15 '22 22:11

u0b34a0f6ae