Привязка Python 3 не работает

Почему-то у меня работают только 2 привязки (левая и правая кнопка мыши). Я сделал довольно много привязок в своих предыдущих программах, но все же я понятия не имею, почему это не работает. Может ли кто-нибудь помочь мне?

class Window:
    def __init__(self):
        self.win=Tk()
        self.can=Canvas(self.win, height=800, width=800, bg="grey90")
        self.can.grid(row=0, column=0)

class Player:
    def __init__(self, bind1, bind2):
        win.can.bind(bind1, self.moveleft)
        win.can.bind(bind2, self.moveright)
    def moveleft(event, self):
        print("left")
    def moveright(event, self):
        print("right")

class Manage:
    def __init__(self, numofplayers):
        self.numofplayers=numofplayers
        self.players=[]
        self.bindings1=["<Left>", "<Button-1>", "<a>", "<m>"]
        self.bindings2=["<Right>", "<Button-3>", "<s>", "<n>"]
        self.start()
    def start(self):
        for i in range(self.numofplayers):
            self.players.append(Player(self.bindings1[i], self.bindings2[i]))

person Tatli    schedule 23.03.2016    source источник
comment
Возможный дубликат Tkinter - невозможно связать события клавиш со стрелками   -  person radl    schedule 23.03.2016


Ответы (1)


Фокус находится на Tk() окне, поэтому холст не улавливает нажатия клавиш. Чтобы заставить холст ловить нажатия клавиш, вам нужно focus_set() на холсте.

class Window(object):
    def __init__(self):
        self.wind=Tk()
        self.can=Canvas(self.wind, height=800, width=800, bg="grey90")
        self.can.grid(row=0, column=0)
        self.can.focus_set()

Я положил туда просто для демонстрации. Вы должны выбрать подходящее место в зависимости от вашего кода.

person Lafexlos    schedule 23.03.2016