, если бы я использовал 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 ) самостоятельно.