canvas.move (id, x, y) не работает с клавишами со стрелками - PullRequest
1 голос
/ 25 мая 2019

Следующий код взят из книги, которую я сейчас читаю, но при запуске движение происходит только в одном направлении (влево), независимо от того, какая клавиша со стрелкой нажата:

#!/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 Ответ

1 голос
/ 26 мая 2019

Код прекрасно объясняет, почему он перемещается влево только потому, что ни одно из условий if не является истинным, так как event.keysym возвращает ключевые слова, такие как «Вверх», «Вниз», «Вправо» и т. Д., ВВы можете видеть, что первая буква является заглавной по сравнению с кодом event.keysym == 'up', все они ниже. Короче говоря, «вверх» не равно «вверх» в соответствии с питоном.

Таким образом, изменяя «вверх», «вниз», «вправо» на «Вверх», «Вниз», «Вправо» соответственно должны решить проблему.

Вы также можете проверить и сравнить 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...