Python canvas.move(id,x,y)不使用箭头键

Python canvas.move(id,x,y)不使用箭头键,python,canvas,tkinter,Python,Canvas,Tkinter,下面的代码来自我现在正在阅读的一本书,但当它运行时,无论按哪个箭头键,移动都只朝一个方向(向左): #/usr/bin/env蟒蛇3 从tkinter进口* def mtri(事件): 如果event.keysym==“向上”: c、 移动(1,0,-3) elif event.keysym==“向下”: c、 移动(1,0,3) elif event.keysym=='right': c、 移动(1,3,0) 其他: c、 移动(1,-3,0) r=Tk() c=画布(r,宽度=400,高度=

下面的代码来自我现在正在阅读的一本书,但当它运行时,无论按哪个箭头键,移动都只朝一个方向(向左):

#/usr/bin/env蟒蛇3
从tkinter进口*
def mtri(事件):
如果event.keysym==“向上”:
c、 移动(1,0,-3)
elif event.keysym==“向下”:
c、 移动(1,0,3)
elif event.keysym=='right':
c、 移动(1,3,0)
其他:
c、 移动(1,-3,0)
r=Tk()
c=画布(r,宽度=400,高度=400)
c、 包()
c、 创建_多边形(10,10,10,60,50,35)
#c、 全部绑定(“”,mtri)
#c、 全部绑定(“”,mtri)
#c、 全部绑定(“”,mtri)
#c、 全部绑定(“”,mtri)
c、 全部绑定(“”,mtri)
r、 mainloop()
我对此感到困惑,有人能帮我检查一下上面的代码是否有错误吗


谢谢

代码没有问题之所以向左移动,只是因为当
事件时,
if
条件均为true。keysym
返回诸如“Up”、“Down”、“Right”等关键字,其中第一个字母是大写字母,与
事件的代码相比。keysym==“Up”
它们都较低简而言之,根据python,“Up”并不等于“Up”。

因此,通过将“向上”、“向下”、“向右”分别改为“向上”、“向下”、“向右”,应该可以解决这个问题

您还可以通过将
event.keysym
打印到控制台来检查和比较它们。另外,一个绑定也可以
c.bind\u all('',mtri)

就这样

def mtri(event):
    print(event.keysym)
    if event.keysym == 'Up':
        print('up')
        c.move(1, 0, -3)
    elif event.keysym == 'Down':
        print('down')
        c.move(1, 0, 3)
    elif event.keysym == 'Right':
        print('right')
        c.move(1, 3, 0)
    else: 
        print('left')
        c.move(1, -3, 0)

您应该做的第一件事是验证
event.keysym
是否是您所认为的。提示:不是。尝试在
mtri
@BryanOakley Nice suggestion的最开始打印
event.keysym
。很抱歉,我不能对你的评论投赞成票,因为我的声誉还没有超过临界值。我尝试了你的建议,现在我看到了打印输出中的
event.keysym
。感谢您的分析和建议。很遗憾,我没有发现书中的代码是
Up
而不是
Up
。我对照这本书检查了两次,没有发现不符之处。我的错。另外,刚刚发现它是一种复制品