如何在Python中按下特定的按键时更改图像
我是Python新手,想知道如何在按下按键时将图像更改为另一个图像。当我按下向下箭头键时,我希望我的图像从GuyUp.gif更改为GuyDown.gif,因此看起来我的人实际上正常行走。我在Python代码如下所示:如何在Python中按下特定的按键时更改图像
from tkinter import *
tk = Tk()
tk.title("Triangle Movement")
tk.resizable(0, 0)
canvas = Canvas(tk, width=500, height=500)
canvas.pack()
tk.update()
guyup = PhotoImage(file = 'GuyUp.gif')
canvas.create_image(5, 5, image = guyup, anchor = NW)
def movetriangle(event):
if event.keysym == 'Up':
canvas.move(1, 0, -4)
elif event.keysym == 'Down':
canvas.move(1, 0, 4)
elif event.keysym == 'Left':
canvas.move(1, -4, 0)
elif event.keysym == 'Right':
canvas.move(1, 4, 0)
elif event.keysym == 'w':
canvas.move(2, 0, -4)
elif event.keysym == 's':
canvas.move(2, 0, 4)
elif event.keysym == 'a':
canvas.move(2, -4, 0)
else:
canvas.move(2, 4, 0)
canvas.bind_all('<KeyPress-Up>', movetriangle)
canvas.bind_all('<KeyPress-Down>', movetriangle)
canvas.bind_all('<KeyPress-Left>', movetriangle)
canvas.bind_all('<KeyPress-Right>', movetriangle)
canvas.bind_all('<KeyPress-w>', movetriangle)
canvas.bind_all('<KeyPress-s>', movetriangle)
canvas.bind_all('<KeyPress-a>', movetriangle)
canvas.bind_all('<KeyPress-d>', movetriangle)
我有两个图像,并希望把它放在我的elif语句的“打倒” 谢谢您的帮助键符!
首先评论:你已经绑定了所有的按键,所以为什么要在回调中使用所有的条件?只需定义单独的moveup
,movedown
等功能并将它们绑定到适当的按键。
现在,对于图像切换,您需要在应用程序中声明显示哪个图像被显示,哪个图像不显示。由于您使用的是全局变量而没有类,所以您还必须将这些信息存储在全局变量中。更改代码的以下部分:
current_image = PhotoImage(file='GuyUp.gif')
image_id = canvas.create_image(5, 5, image=current_image, anchor=NW)
other_image = PhotoImage(file='GuyDown.gif')
,并添加以下功能
def swap_images():
global current_image, other_image, image_id
x, y = canvas.coords(image_id)
canvas.delete(image_id)
image_id = canvas.create_image(x, y, image=other_image)
current_image, other_image = other_image, current_image
现在你可以把这个功能,无论你在你的程序的逻辑一样。
你可能会更好过包装的所有的你写的一类什么,并用实例变量,而不是全局的,和调整功能,这种情况下,作为一个练习;)
编辑:修复了create_image
方法中缺少的关键字。
我也意识到你必须改变你的canvas.move
调用使用image_id
而不是1
作为标识符。也许更好的替代方法是在对象本身上使用标签。
感谢您的帮助,但我仍然遇到问题,按下向下箭头键时图像不会改变。你应该将image_id中的图像更改为other_image而不是current_image? – 2013-04-29 23:51:46
对不起!我在通话中错过了一个'image ='。请参阅编辑注意事项 – Felipe 2013-04-30 00:40:08
谢谢!我将继续练习Python并希望创建一个简单的游戏。 :) – 2013-04-30 11:40:40
由于您是Python的新手,灌输评论:阅读[PEP 8](http://www.python.org/dev/peps/pep-0008/)。在这种情况下,您的违规行为是在关键字参数周围放置空格;) – Felipe 2013-04-29 23:31:47