图像没有显示在Tkinter的标签上

时间:2013-12-23 21:43:33

标签: python image tkinter label

我正在编写一个程序,向用户和计算机发放26张卡片。到目前为止,我只有一个按钮,显示位于用户平台顶部的卡片。 我有一个标签,我有一个卡片图像的文件夹,以大写第一个字母的西装,H,S,C,D和卡,2,3,4 ...,10,J,Q,K,一个。例如,5颗心是H5.bmp。它们都是.bmp文件。该程序与卡片图像位于同一文件夹中。

它们都在名为cards的文件夹中。 我正在运行python 2.5和Tkinter作为GUI构建器。

from random import choice
from Tkinter import *
suits=['H','S','C','D']
cards=['2','3','4','5','6','7','8','9','10','J','Q','K','A']
user=[]
comp=[]
used=[]
userturn=True

def deal():
    global user,comp,used
    numcards=1
    while numcards<=26:
        current=(choice(suits),choice(cards))
        while current in used:
            current=(choice(suits),choice(cards))
        user.append(current)
        used.append(current)
        numcards+=1
    for suit in suits:
        for card in cards:
            if (suit,card) not in user:
                comp.append((suit,card))
def place():
    if userturn and len(user)>0:
        current=user[0]
        print current
        del user[0]
        img='%s%s.bmp'%(current[0],current[1])
        card1.config(image=img)


master=Tk()
card1=Label(master,text='')
card1.pack()
card2=Label(master,text='')
card2.pack()
card3=Label(master,text='')
card3.pack()
card4=Label(master,text='')
card4.pack()
card5=Label(master,text='')
card5.pack()
play=Button(master,text='Play',command=place)
play.pack()
deal()
master.mainloop()    

忽略额外的代码行,因为当我构建它时,这些代码将适用于程序。这只是一个开始。

感谢。

2 个答案:

答案 0 :(得分:1)

一个常见错误,img在函数退出后立即进行垃圾收集,因此图像一旦放置在标签上就会消失。如果要编程GUI,您应该学习IMHO课程。无论如何,为了使它持久化你可以附加到一个全局类实例,比如card1(显然我们没有图像所以无法测试这段代码)。

    img_name='%s%s.bmp'%(current[0],current[1])
    img=BitmapImage(file=img_name)
    card1.img = img
    card1.config(image=card1.img)

答案 1 :(得分:0)

您的代码存在两个问题:

  1. place()内,您忘了指定保存图片的文件夹的路径。行img='%s%s.bmp'%(current[0],current[1]) 仅指定图片的名称,但不指定文件夹所在的路径。因此,您收到了错误消息: TCL错误,表示图像不存在。

  2. 修复上述内容后,您仍需通过运行place()

  3. card1.image = img方法中保留对图片的引用