2017-09-14 146 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()