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
。我对照这本书检查了两次,没有发现不符之处。我的错。另外,刚刚发现它是一种复制品