def __init__(self, icon): """ Animate a gtk.Image Keywords: icon: pass either: - None - creates empty image with self.SIZE - string - for a static icon - string - for a image with multiple sub icons - list of string pathes - a gtk.gdk.Pixbuf if you require a static image """ super(AnimatedImage, self).__init__() self._progressN = 0 if icon is None: icon = GdkPixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1) icon.fill(0) if isinstance(icon, list): self.images = [] for f in icon: self.images.append(GdkPixbuf.Pixbuf.new_from_file(f)) elif isinstance(icon, GdkPixbuf.Pixbuf): self.images = [icon] self.set_from_pixbuf(icon) elif isinstance(icon, str): self._imagefiles = icon self.images = [] if not self._imagefiles: raise IOError, "no images for the animation found in '%s'" % icon # construct self.images list pixbuf_orig = GdkPixbuf.Pixbuf.new_from_file(icon) pixbuf_buffer = pixbuf_orig.copy() x = 0 y = 0 for f in range((pixbuf_orig.get_width() / self.SIZE) * (pixbuf_orig.get_height() / self.SIZE)): pixbuf_orig.copy_area(x, y, self.SIZE, self.SIZE, pixbuf_buffer, 0, 0) self.images.append(pixbuf_buffer) if x == (pixbuf_orig.get_width() - self.SIZE): x = 0 y += self.SIZE else: x += self.SIZE self.set_from_pixbuf(self.images[self._progressN]) self.connect("show", self.start) self.connect("hide", self.stop) else: raise IOError, "need a str, list or a pixbuf"