我在while语句中有一个声明,它应该在画布上绘制一个图像,但它不会发生,我不知道为什么它没有显示任何错误。
def buttonclick_gamescreen(event):
global scorecounter
global pressed
global randomimage
global images
pressed = ""
if event.x >853 and event.x <957 and event.y > 8 and event.y < 56 : pressed = 7
if event.x >666 and event.x <947 and event.y > 491 and event.y < 534 : pressed = 8
while pressed == 8 :
entryx = e1.get()
entryy = e2.get()
answerx = answerlistx[randomimage]
answery = answerlisty[randomimage]
print("The answer to X is", answerx, "You entered", entryx,"The answer to Y is", answery, "You entered ", entryy)
if entryx == answerx and entryy == answery:
print("correct")
canvas.delete(images)
randomimage = random.randrange(0,49+1)
scorecounter = scorecounter + 1
print("You score is now", scorecounter, "New random number is", randomimage)
game = PhotoImage(file=imagelist[randomimage])
images = canvas.create_image(30, 65, image = game, anchor = NW)
e1.delete(0, END)
e2.delete(0, END)
pressed = ''
else:
print("incorrect")
e1.delete(0, END)
e2.delete(0, END)
pressed = ''
images = canvas.create_image(30, 65, image = game, anchor = NW)
行应该适用于我在另一个案例中工作。
这是一个指向其余代码的链接,因为我不想让这个问题太长而且混乱,这表明画布的绘制位置。 http://pastebin.com/RxmPDUAD 从我现在的理解,我将不得不创建一个类,并从那里调用函数为此工作? 编辑:我仍然遇到麻烦,因为我尝试使用全局变量和类,没有运气。
这不是随机数的问题,因为我在图像应该打印的行之前打印它只是因为它不起作用但是确实如此。我做错了什么?
答案 0 :(得分:3)
如果没有实际测试过你的代码,我很确定问题是当你退出方法时你的PhotoImage
对象被垃圾收集了。出于某种奇怪的原因,将它们传递给canvas.create_image
并不会阻止这种情况。尝试制作global
:
global game
game = PhotoImage(file=imagelist[randomimage])
images = canvas.create_image(30, 65, image = game, anchor = NW)
更多指示:
event.x >853 and event.x <957
之类的条件可以写为853 < event.x < 957
imagelist
定义为["%d.gif" % (i+1) for i in range(50)]
after
方法花费的时间以毫秒为单位,所以我想这应该是after(1000, ...)
while pressed == 8:
循环似乎没有多大意义,因为无论如何pressed
在一次迭代后设置为''
class GameFrame(Frame)
并将所有这些内容放在该课程中,而不是制作所有内容global
;在这种情况下,您可以使用self
关键字将PhotoImage
绑定到Frame
以防止垃圾收集