我正在编写一个程序,向用户和计算机发放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()
忽略额外的代码行,因为当我构建它时,这些代码将适用于程序。这只是一个开始。
感谢。
答案 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)
您的代码存在两个问题:
在place()
内,您忘了指定保存图片的文件夹的路径。行img='%s%s.bmp'%(current[0],current[1])
仅指定图片的名称,但不指定文件夹所在的路径。因此,您收到了错误消息: TCL错误,表示图像不存在。
修复上述内容后,您仍需通过运行place()
card1.image = img
方法中保留对图片的引用
醇>