import sys
import pygtk
pygtk.require('2.0')
import gtk
import glib
def buildGui(label, startAnimation):
window = gtk.Window()
window.set_default_size(200, 200)
vbox = gtk.VBox(False, 5)
hbox = gtk.HBox(True, 5)
spinner = gtk.Spinner()
button = gtk.Button('Start')
window.connect('destroy', gtk.main_quit)
button.connect('clicked', startAnimation, spinner)
window.add(vbox)
vbox.pack_start(gtk.Label(label), False, False, 0)
vbox.pack_start(spinner, True, True, 0)
vbox.pack_end(hbox, False, False, 0)
hbox.pack_start(button)
window.show_all()
gtk.main()
def stopAnimation(button, spinner):
spinner.stop()
button.set_sensitive(True)
def startAnimation(button, spinner):
button.set_sensitive(False)
glib.timeout_add_seconds(5, stopAnimation, button, spinner)
spinner.start()
if len(sys.argv) == 2:
if sys.argv[1] == '--timeout':
def stop(button, spinner):
stopAnimation(button, spinner)
return False
def start(button, spinner):
startAnimation(button, spinner)
glib.timeout_add_seconds(5, stop, button, spinner)
label = 'using glib timeout'
elif sys.argv[1] == '--timer':
import threading
def stop(button, spinner):
stopAnimation(button, spinner)
def start(button, spinner):
startAnimation(button, spinner)
threading.Timer(5, stop, (button, spinner))
label = 'using timer'
else:
import threading
import time
def stop(button, spinner):
time.sleep(5)
stopAnimation(button, spinner)
spinner.stop()
def start(button, spinner):
startAnimation(button, spinner)
threading.Thread(target=stop, args=(button, spinner))
label = 'using threading'
buildGui(label, start)