2015-11-20 6 views
0

У меня есть этот кусок кода здесь:Keyevents с себя - Python

from tkinter import * 

class player(): 
    def __init__(self, xcoor = 0, ycoor = 0): 
     self.xcoor = xcoor 

    def leftKey(self, event): 
     self.xcoor += 1 
     print("Right key pressed") 

    def rightKey(self, event): 
     self.ycoor += 1 
     print("Left key pressed") 

world = Tk() 
p1 = player() 

world.bind('<Left>', player.leftKey) 
world.bind('<Right>', player.rightKey) 

world.mainloop() 

Когда я запускаю это и попробовать ключи, будь то вправо или влево, я получаю эту ошибку:

TypeError: leftKey() missing 1 required positional argument: 'event' 
Exception in Tkinter callback 

I подумайте, что ошибка связана с тем, что (self, event) ошибочно, но как я могу это исправить? Я хочу, чтобы это так, что если объект этого класса создан, его xcoor и ycoor будут меняться при вызове этой функции с помощью клавиш.

ответ

1

Привязка к методам объекта воспроизведения проигрывателя вместо:

world.bind('<Left>', p1.leftKey) 
world.bind('<Right>', p1.rightKey) 

В противном случае player.leftKey и player.rightKey будет относиться к несвязанным методам, которые до сих пор ожидать player объекта в качестве первого аргумента (self). Сопоставляя методы из объекта игрока, этот аргумент вводится неявно. Это то же поведение, которое вы получаете, когда вы просто делаете p1.leftKey(evt), что действительно так же, как и player.leftKey(p1, evt).

+0

Это несколько помогло спасибо! Но я все еще получаю эту ошибку: http://prntscr.com/94xf6i – Katie2423

+0

@ Katie2423 Вы забыли добавить 'self.ycoor = ycoor' в метод' __init__'. – poke

+0

Я чувствую себя глупо. Спасибо, что ты был отличный :) – Katie2423

Смежные вопросы