On Wed, 2007-12-12 at 07:31 +0100, evan battaglia wrote:
> Hi,
>  * is there a better way to accomplish what I am trying to do -- load
> large images in the background without freezing the UI? It seems like
> this must be a common problem (don't programs have to load thumbnails
> in the background?!)

Yes; use gnomevfs.async and gtk.gdk.PixbufLoader.

For example, to load an image 10KiB at a time:

import gnomevfs
import gtk

FILE = "/usr/share/pixmaps/backgrounds/gnome/branded/GNOME-Curves.png"

def close_cb(handle, result, loader):
        loader.close()

def read_cb(handle, buffer, result, size, loader):
        if result:
                handle.close(close_cb, loader)
        else:
                loader.write(buffer, size)
                handle.read(10000, read_cb, loader)

def open_cb(handle, result, loader):
        if result:
                print "open failed: ", result
        else:
                handle.read(10000, read_cb, loader)

w = gtk.Window()
image = gtk.Image()
w.add(image)
w.show_all()
loader = gtk.gdk.PixbufLoader()
def updated_cb(loader, x, y, width, height, image):
        image.set_from_pixbuf(loader.get_pixbuf())
def closed_cb(loader, image):
        image.set_from_pixbuf(loader.get_pixbuf())
loader.connect("area-updated", updated_cb, image)
loader.connect("closed", closed_cb, image)
gnomevfs.async.open(FILE, open_cb, gnomevfs.OPEN_READ,
gnomevfs.PRIORITY_DEFAULT, loader)

gtk.main()

_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to