以下代码摘自我现在正在阅读的书,但是当它运行时,无论按什么箭头键,移动都只能在一个方向上(向左):
#!/usr/bin/env python3
from tkinter import *
def mtri(event):
if event.keysym == 'up':
c.move(1, 0, -3)
elif event.keysym == 'down':
c.move(1, 0, 3)
elif event.keysym == 'right':
c.move(1, 3, 0)
else:
c.move(1, -3, 0)
r = Tk()
c = Canvas(r, width=400, height=400)
c.pack()
c.create_polygon(10, 10, 10, 60, 50, 35)
#c.bind_all('<KeyPress-Up>', mtri)
#c.bind_all('<KeyPress-Down>', mtri)
#c.bind_all('<KeyPress-Right>', mtri)
#c.bind_all('<KeyPress-Left>', mtri)
c.bind_all('<Key>', mtri)
r.mainloop()
对此我感到困惑,有人可以帮忙检查一下上面代码中是否有错误吗?
谢谢!
答案 0 :(得分:1)
代码之所以很好,是因为if
都不符合条件,因为event.keysym
返回诸如“ Up”,“ Down”,“ Right”和依此类推,与代码event.keysym == 'up'
相比,您可以看到第一个字母为大写字母,它们都较低。 简而言之,根据python,“向上”不等于“向上”。
因此,通过分别将“上”,“下”,“右” 更改为“上”,“下”,“右” ,即可解决此问题。
您还可以通过将event.keysym
打印到控制台来进行比较。 c.bind_all('<Key>', 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)