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

时间:2019-05-25 20:47:27

标签: python canvas tkinter

以下代码摘自我现在正在阅读的书,但是当它运行时,无论按什么箭头键,移动都只能在一个方向上(向左):

#!/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()

对此我感到困惑,有人可以帮忙检查一下上面代码中是否有错误吗?

谢谢!

1 个答案:

答案 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)