iconview, картинка показывает только один - PullRequest
0 голосов
/ 14 февраля 2012

Добрый день!Я хочу показать все картинки в папке, но этот код показывает только 1 изображение.Где ошибка?

#!/usr/bin/python
import threading
import gtk
import os  

gtk.gdk.threads_init()
class app(gtk.Window):
def __init__(self):
    gtk.Window.__init__(self)
    self.set_title("spoView")
    self.set_default_size(700, 500)
    self.connect("destroy", gtk.main_quit)

    scroll = gtk.ScrolledWindow()
    scroll.set_border_width(2)
    scroll.set_shadow_type(gtk.SHADOW_ETCHED_IN)
    scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)

    thumb_view = gtk.IconView()
    model = gtk.ListStore(str, gtk.gdk.Pixbuf)
    thumb_view.set_model(model)
    thumb_view.set_text_column(0)
    thumb_view.set_pixbuf_column(1)
    thumb_view.set_columns(4)

    vbox = gtk.VBox()
    status = gtk.Statusbar()

    scroll.add(thumb_view)
    vbox.pack_start(scroll, True, True)
    vbox.pack_start(status, False, False)
    self.add(vbox)
    self.show_all()

    files = os.listdir("/home/pdk/Pictures/foto2/")
    thread = threading.RLock()
    with thread:
        for image in files:
            pixbuf = gtk.gdk.pixbuf_new_from_file_at_size("/home/pdk/Pictures/foto2/%s" %image, 128, 128) 
            model.append([image, pixbuf])

    status.push(0, "%s files loaded." % len(files))     


a = app()
gtk.main()

1 Ответ

0 голосов
/ 17 февраля 2012

Я заметил, что нет проверки того, являются ли добавляемые вами файлы действительным изображением, прежде чем вы создадите из них pixbuf.Если он работает с файлом, который не является изображением, в потоке, добавляющем данные к модели, возникнет ошибка.

Прежде чем пытаться создать pixbuf, вы можете сделать что-то вроде:

with thread:
for image in files:
    if image.endswith(".jpg"):
        pixbuf = gtk.gdk.pixbuf_new_from_file_at_size("/home/pdk/Pictures/foto2/%s" %image, 128, 128) 
        model.append([image, pixbuf])
...