2012-02-14 70 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])