在使用 Python Tkinter 创建了一个游戏程序,其中包括一个需要移动的图像(“人”)。但是,图像无法正确显示,游戏也无法正常运行。
解决方案
为了解决图像无法正确显示的问题,需要对代码进行以下修改:
在 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()
此代码会创建一个红色的圆形图像,并使其在窗口中移动。