#!/usr/bin/env python # Modified file based upon John Finlay's PyGTK 2.0 Tutorial # http://www.pygtk.org/pygtk2tutorial/sec-ProgressBars.html import pygtk pygtk.require('2.0') import gtk, gobject # Update the value of the progress bar so that we get # some movement def progress_timeout(pbobj): # Calculate the value of the progress bar using the # value range set in the adjustment object new_val = pbobj.pbar.get_fraction() + 0.10 if new_val > 1.0: return False # Set the new value pbobj.pbar.set_fraction(new_val) # As this is a timeout function, return TRUE so that it # continues to get called until we reach 1.0 return True class ProgressBar: # start the progress bar def start_progress(self, widget, data=None): # Add a timer callback to update the value of the progress bar try: gobject.source_remove(self.timer) except: pass self.pbar.set_fraction(0.0) self.timer = 0 self.timer = gobject.timeout_add (500, progress_timeout, self) # Clean up allocated memory and remove the timer def destroy_progress(self, widget, data=None): try: gobject.source_remove(self.timer) except: pass self.timer = 0 gtk.main_quit() def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_resizable(True) self.window.connect("destroy", self.destroy_progress) self.window.set_title("ProgressBar") self.window.set_border_width(0) vbox = gtk.VBox(False, 5) vbox.set_border_width(10) self.window.add(vbox) vbox.show() # Create a centering alignment object align = gtk.Alignment(0.5, 0.5, 0, 0) vbox.pack_start(align, False, False, 5) align.show() # Create the ProgressBar self.pbar = gtk.ProgressBar() self.pbar.set_text("some text") self.pbar.set_fraction(0.0) align.add(self.pbar) self.pbar.show() separator = gtk.HSeparator() vbox.pack_start(separator, False, False, 0) separator.show() # Add a button to start the progress button button = gtk.Button("start") button.connect("clicked", self.start_progress) vbox.pack_start(button, False, False, 0) button.show() # Add a button to exit the program button = gtk.Button("close") button.connect("clicked", self.destroy_progress) vbox.pack_start(button, False, False, 0) button.show() self.window.show() def main(): gtk.main() return 0 if __name__ == "__main__": ProgressBar() main()