Перемещение объекта (квадрата) с помощью tkinter в python - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь переместить квадрат с помощью клавиш 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)

1 Ответ

0 голосов
/ 06 декабря 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...