【问题标题】:canvas.move(id, x, y) not working with arrow keyscanvas.move(id, x, y) 不能使用箭头键
【发布时间】:2019-05-25 20:47:27
【问题描述】:

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

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

我对此感到困惑,有人可以帮忙检查上面的代码是否有任何问题吗?

谢谢!

【问题讨论】:

  • 您应该做的第一件事是验证event.keysym 是您认为的那样。提示:不是。尝试在mtri 的开头打印出event.keysym
  • @BryanOakley 不错的建议。抱歉,我无法对您的评论投赞成票,因为我的声誉尚未超过阈值。我尝试了您的建议,现在我看到打印输出中的 event.keysym 是什么。

标签: python canvas tkinter


【解决方案1】:

代码很好,它向左移动的原因只是因为if 条件都不为真,因为event.keysym 返回诸如“上”、“下”、“右”等关键字,在与event.keysym == 'up' 代码相比,您可以看到第一个字母是大写字母,它们都较低。 简而言之,根据python,“向上”不等于“向上”。

因此,通过将 "up" 、 "down" 、 "right" 分别更改为 "Up" 、 "Down" 、 "Right" 应该可以解决问题。

您还可以通过将event.keysym 打印到控制台来检查和比较它们。还有一个绑定很好c.bind_all('&lt;Key&gt;', 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)

【讨论】:

  • 感谢您的分析和建议。很遗憾我没有找到书中的代码是Up而不是up。我对照这本书检查了两次,没有发现这里的差异。我的错。另外,刚刚发现它有点像stackoverflow.com/questions/45872276/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多