#!/usr/bin/env python # -*- mode: python; coding: utf-8; -*- # ---------------------------------------------------------------------------## # # Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer # Copyright (C) 2003 Mt. Hood Playing Card Co. # Copyright (C) 2005-2009 Skomoroh # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # ---------------------------------------------------------------------------## # imports import os import sys import gtk from gtk import gdk # Toolkit imports from tkutil import makeToplevel, setTransient # ************************************************************************ # * a simple progress bar # ************************************************************************ class PysolProgressBar: def __init__(self, app, parent, title=None, images=None, color='blue', bg='#c0c0c0', height=25, show_text=1, norm=1): self.parent = parent self.percent = 0 self.steps_sum = 0 self.norm = norm self.top = makeToplevel(parent, title=title) self.top.set_position(gtk.WIN_POS_CENTER) self.top.set_resizable(False) self.top.connect("delete_event", self.wmDeleteWindow) # hbox hbox = gtk.HBox(spacing=5) hbox.set_border_width(10) hbox.show() self.top.table.attach(hbox, 0, 1, 0, 1, 0, 0, 0, 0) # hbox-1: image if images and images[0]: im = gtk.Image() im.set_from_pixbuf(images[0].pixbuf) hbox.pack_start(im, expand=False, fill=False) im.show() im.set_property('xpad', 10) im.set_property('ypad', 5) # hbox-2:vbox vbox = gtk.VBox() vbox.show() hbox.pack_start(vbox, False, False) # hbox-2:vbox:pbar self.pbar = gtk.ProgressBar() self.pbar.show() vbox.pack_start(self.pbar, True, False) self.pbar.realize() # ~ self.pbar.set_show_text(show_text) self.pbar.set_text(str(show_text)+'%') w, h = self.pbar.size_request() self.pbar.set_size_request(max(w, 300), max(h, height)) # hbox-3:image if images and images[1]: im = gtk.Image() im.set_from_pixbuf(images[1].pixbuf) hbox.pack_end(im, expand=False) im.show() im.set_property('xpad', 10) im.set_property('ypad', 5) setTransient(self.top, parent) self.top.show() self.top.window.set_cursor(gdk.Cursor(gdk.WATCH)) self.update(percent=0) def destroy(self): self.top.destroy() def pack(self): pass def update(self, percent=None, step=1): # self.steps_sum += step # print self.steps_sum, self.norm step /= self.norm if percent is None: self.percent += step elif percent > self.percent: self.percent = percent percent = int(self.percent) percent = min(100, max(0, percent)) self.pbar.set_fraction(percent / 100.0) self.pbar.set_text(str(percent)+'%') self.update_idletasks() def reset(self, percent=0): self.percent = percent def update_idletasks(self): while gtk.events_pending(): gtk.main_iteration() def wmDeleteWindow(self, *args): return True # ************************************************************************ # * # ************************************************************************ # %ifndef BUNDLE class TestProgressBar: def __init__(self, parent, images=None): self.parent = parent self.progress = PysolProgressBar(None, parent, title="Progress", images=images, color='#008200') self.progress.pack() self.func = [self.update, 0] # self.func[1] = timeout_add(30, self.func[0]) def update(self, *args): if self.progress.percent >= 100: self.progress.destroy() # mainquit() return False self.progress.update(step=1) return True def progressbar_main(args): root = gtk.Window() # root.connect("destroy", mainquit) # root.connect("delete_event", mainquit) images = None if 1: from tkwrap import loadImage im = loadImage(os.path.join( os.pardir, os.pardir, 'data', 'images', 'jokers', 'joker07_40_774.gif')) images = (im, im) TestProgressBar(root, images=images) # main() return 0 if __name__ == '__main__': sys.exit(progressbar_main(sys.argv)) # %endif