如何解决在 Python Tkinter 游戏中移动图像的问题

27 阅读1分钟

在使用 Python Tkinter 创建了一个游戏程序,其中包括一个需要移动的图像(“人”)。但是,图像无法正确显示,游戏也无法正常运行。

huake_00183_.jpg

解决方案

为了解决图像无法正确显示的问题,需要对代码进行以下修改:

Paddle 类的 __init__ 方法中,将 self.id.pack() 改为 canvas.pack()。 在 Paddle 类的 left()right()up()down() 方法中,将 canvas.move(self.id, x, y) 改为 self.canvas.move(self.id, x, y)。 在 easy() 函数中,将 tk.bind("<KeyPress-Right>", paddle.left) 改为 tk.bind("<KeyPress-Right>", paddle.right)。 修改后的代码如下:

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
        canvas.pack()
    def left(self, evt):
        print('Left')
        self.x = -2
        self.canvas.move(self.id, 10, 0)

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

    def up(self, evt):
        self.x = 2
        self.canvas.move(self.id, -0, -10)

    def down(self, evt):
        self.x = 2
        self.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.right)  # Fix: Change paddle.left to paddle.right
    tk.bind("<KeyPress-Left>", paddle.left)
    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']

代码例子

以下是在 Tkinter 中创建一个可以移动的图像的代码示例:

from tkinter import *
import time

class Paddle:
    def __init__(self, canvas, x, y):
        self.canvas = canvas
        self.x = x
        self.y = y
        self.id = canvas.create_oval(x-10, y-10, x+10, y+10, fill="red")

    def draw(self):
        self.canvas.move(self.id, self.x, self.y)

def main():
    tk = Tk()
    tk.title("Moving Image")
    canvas = Canvas(tk, width=500, height=400)
    canvas.pack()

    paddle = Paddle(canvas, 200, 200)

    while True:
        paddle.draw()
        tk.update_idletasks()
        tk.update()
        time.sleep(0.01)

if __name__ == "__main__":
    main()

此代码会创建一个红色的圆形图像,并使其在窗口中移动。