【发布时间】:2020-05-11 17:52:30
【问题描述】:
我正在尝试制作一个简单的海龟脚本,询问用户他们的用户名,然后将其存储。我没有任何代码,但如果我使用onkeypress,似乎我必须创建一个函数来将每个可能的字符附加到用户名变量,这似乎不是很pythonic。有没有更好的方法来做到这一点?
【问题讨论】:
标签: python turtle-graphics coding-efficiency
我正在尝试制作一个简单的海龟脚本,询问用户他们的用户名,然后将其存储。我没有任何代码,但如果我使用onkeypress,似乎我必须创建一个函数来将每个可能的字符附加到用户名变量,这似乎不是很pythonic。有没有更好的方法来做到这一点?
【问题讨论】:
标签: python turtle-graphics coding-efficiency
如果我使用 onkeypress,看来我必须为 将每个可能的字符附加到用户名变量, 这似乎不是很pythonic。有没有更好的方法来做到这一点?
是但不是。如果你省略了第二个 key 参数给海龟的 onkeypress() 函数,当 any 键被按下时,它将调用你的按键处理程序代码。问题是,他们留下了代码让你知道哪个键!
我们可以通过重写底层_onkeypress 代码来解决这个设计错误,以便在没有设置键的情况下(即key is None)将tkinter 的event.char 传递给海龟的事件处理程序。
这是一个粗略的示例,可以帮助您入门:
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)。
【讨论】: