在Python中按TKinter中的特定键时如何更改图像

2024-10-01 13:43:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,想知道如何在按下某个键时将图像更改为另一个图像。我想改变我的形象盖尤.gif到盖登.gif当我按箭头键的时候看起来像是我的人。我用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语句中,关键字是'Down' 谢谢你的帮助!在


Tags: 图像imageeventmovebindallgifkeypress
1条回答
网友
1楼 · 发布于 2024-10-01 13:43:46

首先要说明的是:您已经以不同的方式绑定了所有的按键,那么为什么要在回调中使用所有的条件呢?只需定义单独的moveupmovedown等函数,并将它们绑定到适当的按键。在

现在,对于图像切换,您需要在应用程序中使用状态来知道显示哪个图像,而不显示哪个图像。由于您使用的是全局变量而没有类,因此您还必须将这些信息存储在全局变量中。更改代码的以下部分:

current_image = PhotoImage(file='GuyUp.gif')
image_id = canvas.create_image(5, 5, image=current_image, anchor=NW)
other_image = PhotoImage(file='GuyDown.gif')

并添加以下函数

^{pr2}$

现在您可以将此函数放在程序逻辑的任何位置。在

在这种情况下,用一个全局函数来代替这个例子,你应该把它写成一个更好的例子。)


编辑:修复了create_image方法中缺少的关键字。在

我还意识到您必须更改您的canvas.move调用,以使用image_id而不是{}作为标识符。也许存储它的更好方法是在对象本身上使用标记。在

相关问题 更多 >