""" gtasklets demo program """ import gtk import gtasklet class Counter(gtasklet.Tasklet): def __init__(self, dialog): self.dialog = dialog super(Counter, self).__init__() def run(self): timeout = gtasklet.WaitForTimeout(1000) msgwait = gtasklet.WaitForMessages(accept='quit') for i in xrange(10, 0, -1): self.dialog.format_secondary_markup("Time left: %i seconds" % i) yield timeout, msgwait ev = gtasklet.get_event() if isinstance(ev, gtasklet.Message) and ev.name == 'quit': return elif ev is timeout: pass else: raise AssertionError def main(): dialog = gtk.MessageDialog(parent=None, flags=0, type=gtk.MESSAGE_QUESTION, buttons=gtk.BUTTONS_YES_NO, message_format="Please answer Yes or No") dialog.format_secondary_markup("Time left: ?? seconds") dialog.show() counter = Counter(dialog) yield (gtasklet.WaitForTasklet(counter), gtasklet.WaitForSignal(dialog, "response"), gtasklet.WaitForSignal(dialog, "close")) event = gtasklet.get_event() if isinstance(event, gtasklet.WaitForSignal): print "signal '%s', stopping counter" % event.signal yield gtasklet.Message("quit", dest=counter) # stop the counter if event.signal == 'close': gtk.main_quit() return response = event.signal_args[0] msgbox = gtk.MessageDialog(parent=dialog, flags=gtk.DIALOG_DESTROY_WITH_PARENT, type=gtk.MESSAGE_INFO, buttons=gtk.BUTTONS_OK, message_format=("Thank you " "for your kind answer!")) print "response was", response if response == gtk.RESPONSE_YES: msgbox.format_secondary_markup("Your response was Yes") elif response == gtk.RESPONSE_NO: msgbox.format_secondary_markup("Your response was No") else: ## must have been a delete event print "response was delete event" gtk.main_quit() return msgbox.show() print "showing dialog" yield (gtasklet.WaitForSignal(msgbox, "response"), gtasklet.WaitForSignal(msgbox, "close")) print "event", gtasklet.get_event() else: ## timeout must have exausted.. assert isinstance(event, gtasklet.WaitForTasklet) msgbox = gtk.MessageDialog(parent=dialog, flags=gtk.DIALOG_DESTROY_WITH_PARENT, type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK, message_format="You're too slow!!") msgbox.show() yield (gtasklet.WaitForSignal(msgbox, "response"), gtasklet.WaitForSignal(msgbox, "close")) gtk.main_quit() if __name__ == '__main__': gtasklet.run(main()) gtk.main()