2012-02-14 82 views
0

美好的一天!我想显示文件夹中的所有图片,但此代码 只显示1张图片。错误在哪里?iconview,图片只显示一个

#!/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() 
+0

是什么LEN(文件)的价值? – 2012-02-14 13:06:42

+0

我不明白“2 + mb”是什么意思。从我读的'files'应该是一个字符串列表,'len(files)'应该返回一个整数值,即该列表中的字符串数量。 – 2012-02-14 13:18:55

+0

'model.append([image,pixbuf])','pixbuf = gtk ...'将在语法 – kypdk 2012-02-14 13:37:52

回答

0

我注意到没有检查你添加的文件是否是一个有效的图像,然后再从它们创建一个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])