Как я могу регистрировать нажатия клавиш с помощью черепахи? - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь сделать простой скрипт черепахи, который запрашивает у пользователя его имя пользователя, а затем сохраняет его. У меня нет никакого кода, но если бы я использовал onkeypress, похоже, мне пришлось бы создать функцию для добавления каждого возможного символа в переменную username, и это выглядит не очень pythoni c. Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 26 января 2020

, если бы я использовал onkeypress, похоже, мне пришлось бы создать функцию для добавления каждого возможного символа в переменную username, и это выглядит не очень pythoni c. Есть ли лучший способ сделать это?

Да, но нет. Если вы отключите второй, key, аргумент функции onkeypress() черепахи, она вызовет ваш код обработчика нажатий клавиш при нажатии любой клавиши . Проблема в том, что они оставили код, чтобы вы знали, какой ключ!

Мы можем обойти эту ошибку проектирования, переписав базовый код _onkeypress для передачи tkinter event.char в обработчик событий черепахи в случае где ключ не был установлен (например, key is None).

Вот грубый пример этого, чтобы вы начали:

from turtle import Screen, Turtle
from functools import partial

FONT = ('Arial', 18, 'normal')

def _onkeypress(self, fun, key=None):
    if fun is None:
        if key is None:
            self.cv.unbind("<KeyPress>", None)
        else:
            self.cv.unbind("<KeyPress-%s>" % key, None)
    elif key is None:
        def eventfun(event):
            fun(event.char)
        self.cv.bind("<KeyPress>", eventfun)
    else:
        def eventfun(event):
            fun()
        self.cv.bind("<KeyPress-%s>" % key, eventfun)

def letter(character):
    turtle.write(character, move=True, font=FONT)

turtle = Turtle()

screen = Screen()
screen._onkeypress = partial(_onkeypress, screen)
screen.onkeypress(letter)
screen.listen()
screen.mainloop()

Просто начните печатать в окне, и ваши символы будут отображаться вверх. Вам нужно будет обработать специальных символов (например, return ) самостоятельно.

...