0

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()

しかし、これは機能していません、誰かが何か提案がありますか?

ありがとうトム

4

2 に答える 2

1

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()
于 2013-03-11T23:21:08.017 に答える
0

あなたが言うところを正しく扱っているとは思いませんpanels = label.grid()。代わりに、label.grid代入演算子ではなくアクションになるようにしてください。

于 2013-03-08T22:48:18.190 に答える