2017-09-14 16 views
0

このコードは、ボタンをクリックするたびに画像を追加することになっていますが、複数回実行すると最後の画像は消えます。Tkinterラベルイメージが空白になる

import tkinter 

suits = ["club", "heart", "diamond", "spade"] 
faces = ["jack", "queen", "king"] 


def deal(): 
    global value 
    global card 
    global deck 
    value, card = deck.pop(0) 
    print(deck) 
    return card 

def image(): 
    global count 
    tkinter.Label(root, image=deal()).grid(row=1, column=count) 
    count += 1 

root = tkinter.Tk() 

deck = [] 

for x in range(1, 11): 
    for y in suits: 
     pic = "cards/{}_{}.png".format(x, y) 
     img = tkinter.PhotoImage(file=pic) 
     deck.append((x, img)) 

    for z in faces: 
     pic = "cards/{}_{}.png".format(z, y) 
     img = tkinter.PhotoImage(file=pic) 
     deck.append((10, img)) 

value, card = deck.pop(0) 
count = 0 

tkinter.Button(root, text="Click me", command=image).grid(row=0, column=0) 
root.mainloop() 

これはどのように修正する必要がありますか?

答えて

0

dealを再度呼び出すと、cardに格納されているPhotoImageが別のものに置き換えられてガベージコレクションされ、消えてしまうという問題があります。これを防ぐために、画像のリストを作成することができます:

import tkinter 

suits = ["club", "heart", "diamond", "spade"] 
faces = ["jack", "queen", "king"] 
pictures = [] 

def deal(): 
    global value 
    global card 
    global deck 
    value, card = deck.pop(0) 
    print(deck) 
    return card 

def image(): 
    global count 
    tkinter.Label(root, image=deal()).grid(row=1, column=count) 
    count += 1 

root = tkinter.Tk() 

deck = [] 

for x in range(1, 11): 
    for y in suits: 
     pic = "cards/{}_{}.png".format(x, y) 
     img = tkinter.PhotoImage(file=pic) 
     pictures.append(img) 
     deck.append((x, img)) 

    for z in faces: 
     pic = "cards/{}_{}.png".format(z, y) 
     img = tkinter.PhotoImage(file=pic) 
     pictures.append(img) 
     deck.append((10, img)) 

value, card = deck.pop(0) 
count = 0 

tkinter.Button(root, text="Click me", command=image).grid(row=0, column=0) 
root.mainloop() 
関連する問題