动态图像不起作用

时间:2013-09-14 02:49:13

标签: python canvas tkinter

我的程序不会工作。这个男人是要移动的,但我甚至无法正确地展示他。 请帮帮我,我的代码是......

from tkinter import *
import random
import time

class Paddle:
    def __init__(self, canvas):
        self.canvas = canvas
        my_image = PhotoImage(file='C:\\Documents and Settings\\Patrick\\Desktop\\      most commonly used stuff\\game\\bob 1.GIF')
        self.id = canvas.create_image(0, 0, image=my_image)
        self.canvas.move(self.id, 200, 300)
        self.x = 0
        self.id.pack()
    def left(self, evt):
        print('Left')
        self.x = -2
        canvas.move(self.id, 10, 0)

    def right(self, evt):
        print('Right')
        self.x = 2
        canvas.move(self.id, -10, -0)
    def up(self, evt):
        self.x = 2
        canvas.move(self.id, -0, -10)
    def down(self, evt):
        self.x = 2
        canvas.move(self.id, -0, 10)

    def draw(self):
        self.canvas.move(self.id, self.x, 0)
        pos = self.canvas.coords(self.id)
        if pos[0] <= 0:
            self.x = 0
        elif pos [2] >= self.canvas_width:
            self.x = 10



def easy():
    paddle = Paddle(canvas,)
    tk.bind("<KeyPress-Right>", paddle.left)
    tk.bind("<KeyPress-Left>", paddle.right)
    tk.bind("<KeyPress-a>", paddle.right)
    tk.bind("<KeyPress-d>", paddle.left)
    tk.bind("<KeyPress-Up>", paddle.up)
    tk.bind("<KeyPress-Down>", paddle.down)
    b2.destroy()

    while 1:
        tk.update_idletasks()
        tk.update()
        time.sleep(0.01)


def start():
    b2.pack()
    b.destroy()

tk = Tk()
tk.title("game")
tk.resizable(0, 0)
tk.wm_attributes("-topmost", 1)
canvas = Canvas(tk, bg="yellow", width=500, height=400)
canvas.pack()
tk.update
b = Button(tk, text="play", command=start)
b.pack()
b2 = Button(tk, text="easy", command=easy)

console = ['top','bottom','right','left','paddle']

我真的希望这个能够发挥作用,如果有人能解决这个问题,我真的很感激 感谢任何帮助过的人:)

1 个答案:

答案 0 :(得分:0)

只需几行就无法修复代码。你有一个重大的结构性缺陷。

要使tkinter程序正常工作,您必须致电mainloop。确实,可以在没有它的情况下使用tkinter,但仅限于非常特殊的用例,并且只有当你知道自己在做什么时才会这样。因此,您需要做的第一件事就是完全删除while 1循环,然后调用mainloop。不要从mainloop致电easy。相反,它通常被称为程序中的最后一行。