2013-03-08 143 views
0

我想創建一個程序,使用Tkinter在窗口上顯示幾個不同目錄的縮略圖。到目前爲止,我有這個:Tkinter圖像查看器

import Tkinter as tk 
from PIL import Image, ImageTk 
import Image, os 

root = tk.Tk() 
root.title('Shot Viewer') 
w, h, x, y = 1000, 1000, 0, 0 
root.geometry("%dx%d+%d+%d" % (w, h, x, y)) 

#quit 
def quit(root): 
    root.quit() 
    root.destroy() 

path = "/media/Expansion Drive/Heros Mission 3/Scenes/Scene 1-3/Shots/" 
labels = [] 
for files in os.listdir(path): 
    number = files.split("_")[1] 
    filed = "/media/Expansion Drive/Heros Mission 3/Scenes/Scene 1-3/Shots/Shot_{} /Frames/Shot_{}_000000.png".format(number, number) 
    if os.path.lexists(filed) == 'False': 
     pass 
    else: 
     im = Image.open(imageFile) 
     im.thumbnail((96, 170), Image.ANTIALIAS) 
     image = ImageTk.PhotoImage(im) 
     label = tk.Label(root, image=image, name=number) 
     labels.append(label) 

print labels 

for label in labels: 
    panel = label.grid() 

panel2.grid(row=2, column=1) 
button2 = tk.Button(panel2, text='Quit', command=lambda root=root:quit(root)) 
button2.grid(row=1, column=1, sticky='NW') 

root.mainloop() 

但是,這是行不通的,有沒有人有任何建議?

感謝 湯姆

+0

不要錯誤說什麼? – erdekhayser 2013-03-08 21:44:04

+2

請提供堆棧跟蹤信息,或者您認爲代碼不能正常工作的具體原因 – 2013-03-08 21:51:09

+0

如果不知道錯誤是什麼,我們不禁感慨。我們不是mindreaders – erdekhayser 2013-03-08 22:14:05

回答

0

我不認爲你是正確處理它,你說panels = label.grid()。相反,嘗試僅做label.grid,因此它不是賦值運算符,而是一個操作。

+0

從label.grid中刪除括號會停止錯誤消息。但是圖像仍然無法顯示在窗口中。此外,我不得不刪除按鈕代碼,因爲這是拋出此錯誤:文件「/usr/lib/python2.7/lib-tk/Tkinter.py」,行2047年,在__init__ 小部件.__初始化__(自我,主,'按鈕',cnf,kw) 文件「/usr/lib/python2.7/lib-tk/Tkinter.py」,第1977行,在__init__ (widgetName,self._w)+ extra + self._options(cnf) ) TclError:無法調用「按鈕」命令:應用程序已被銷燬(由於沒有足夠的字符,我無法完整地顯示錯誤)。 – Tom 2013-03-08 23:09:46

0

使用glob模塊來幫助查找相關文件。

至於沒有出現圖像:

import Tkinter as tk 
from PIL import Image, ImageTk 
import glob 

root = tk.Tk() 

labels = [] 

for jpeg in glob.glob("C:/Users/Public/Pictures/Sample Pictures/*.jpg")[:5]: 
    im = Image.open(jpeg) 
    im.thumbnail((96, 170), Image.ANTIALIAS) 
    photo = ImageTk.PhotoImage(im) 
    label = tk.Label(root, image=photo) 
    label.pack()  
    label.img = photo # * 
    # * Each time thru the loop, the name 'photo' has a different 
    # photoimage assigned to it. 
    # This means that you need to create a separate, 'longer-lived' 
    # reference to each photoimage in order to prevent it from 
    # being garbage collected. 
    # Note that simply passing a photoimage to a Tkinter widget 
    # is not enough to keep that photoimage alive.  
    labels.append(label) 

root.mainloop()