Я пытаюсь переместить квадрат с помощью клавиш WASD, с моей реализацией у меня возникают проблемы при попытке передать аргументы в функцию обновления функции. Я надеюсь заставить его слушать событие с клавиатуры. Может кто-нибудь мне помочь?

class Robot(object):
    def __init__(self):

        self.speed = [0, 0]     # iniital speed ste to 0
        self.image = window.create_rectangle(0, 0, 20, 20, fill="white")  # sample robot
        window.bind_all("<KeyPress-w>", self.update)
        window.bind_all("<KeyPress-a>", self.update)
        window.bind_all("<KeyPress-s>", self.update)
        window.bind_all("<KeyPress-d>", self.update)
        # window.bind_all("<KeyPress-x>", self.deploy)

    def move(self, object, x, y):
        window.move(self.image, x, y)

    def update(self, event):

        if event.keysym == 'D':
            self.speed[1] = 1
            self.move(self.image, self.speed[0], 0)
        if event.keysym == "A":
            self.speed[1] = -1
            self.move(self.image, self.speed[0], 0)
        if event.keysym == "W":
            self.speed[0] = -1
            self.move(self.image, 0, self.speed[1])
        if event.keysym == "S":
            self.speed[0] = 1
            self.move(self.image, 0, self.speed[1])


    def deploy(self):
        pass

Вот точка запуска

while True:
    pl1 = Robot()
    pl1.update() # here is the problem
    tk.update()
    time.sleep(10)
0
Djanken 6 Дек 2018 в 15:50

1 ответ

Лучший ответ

Первая проблема заключается в том, что вы используете time.sleep, который замораживает основной цикл tkinter, предотвращая его реакцию на события клавиатуры. Вам не нужен цикл while True, просто выполните mainloop вашего экземпляра Tk.

Вторая проблема заключается в том, что вы вызываете метод Robot.update без передачи ожидаемого аргумента event. Нет необходимости делать это самостоятельно, привязки клавиатуры будут запускаться при каждом нажатии одной из клавиш.

Думаю, мой ответ на вопрос Попытка заставить объект перемещаться в сетке с помощью tkinter через входы игрока должна вам помочь.

1
j_4321 6 Дек 2018 в 13:04