2017-05-16 14 views
0

問題: なぜこのコードは5つのイメージの行を生成しないのですか? Iveはpack、place、gridの組み合わせを試しましたが、問題を解決できません。私は現在の問題は、画像の背景がお互いに重なっていると思うが、問題を解決するためにループを逆転しようとしたが、何も変わっていない。Python TKinterイメージの背景行

コード:

import base64 
try: 
    # Python2 
    import Tkinter as tk 
    from urllib2 import urlopen 
except ImportError: 
    # Python3 
    import tkinter as tk 
    from urllib.request import urlopen 
root = tk.Tk() 
root.title("display a row of images") 
root.geometry("%dx%d+%d+%d" % (1000, 600, 0, 0)) 
images = ["C20KEWS", "ANYT6mV", "b3vwblN", "7Y1MG17", "ouXXEMi"] 
for image in images: 
    imgbytes = urlopen("http://i.imgur.com/"+image+".gif").read() 
    imgb64 = base64.encodestring(imgbytes) 
    imageTK = tk.PhotoImage(data=imgb64) 
    imageContainer = tk.Frame(root, 
     bg="black", 
     width=200, 
     height=600 
    ) 
    print images.index(image)*200, 0 
    imageContainer.place(x=images.index(image)*200, y=0, width=200, height=600) 
    imageLabel = tk.Label(imageContainer, image=imageTK, bg='black') 
    imageLabel.pack(side=tk.LEFT) 
root.mainloop() 
+0

だから、何が実際にうまくいきませんか?画像はまったく表示されませんか?間違った場所に現れますか?かわいい子猫の画像で置き換えられますか? – jasonharper

+0

[例](http://imgur.com/IUtaSVt)画像の行が1つだけではなく – Techhead55

答えて

2

imageTkが上書きされ、ごみを収集します。それらは表示する必要があります。

これらのImageTkオブジェクトを保存しないようにしてください。

root = tk.Tk() 
root.title("display a row of images") 
root.geometry("%dx%d+%d+%d" % (1000, 600, 0, 0)) 
images = ["C20KEWS", "ANYT6mV", "b3vwblN", "7Y1MG17", "ouXXEMi"] 
photo_images = [] # <-------- 
for image in images: 
    imgbytes = urlopen("http://i.imgur.com/"+image+".gif").read() 
    imgb64 = base64.encodestring(imgbytes) 
    imageTK = tk.PhotoImage(data=imgb64) 
    photo_images.append(imageTK) # <----------- 
    imageContainer = tk.Frame(root, 
     bg="black", 
     width=200, 
     height=600 
    ) 
    print images.index(image)*200, 0 
    imageContainer.place(x=images.index(image)*200, y=0, width=200, height=600) 
    imageLabel = tk.Label(imageContainer, image=imageTK, bg='black') 
    imageLabel.pack(side=tk.LEFT) 
root.mainloop() 

enter image description here

関連する問題