如何使用海龟记录按键?

问题描述 投票:-1回答:1

我正在尝试制作一个简单的乌龟脚本,要求用户输入用户名,然后将其存储。我没有任何代码,但是如果我使用onkeypress,似乎我必须要创建一个函数,以便将每个可能的字符附加到用户名变量中,这似乎不是很Python。有更好的方法吗?

python turtle-graphics coding-efficiency
1个回答
0
投票

如果我使用了onkeypress,似乎我必须为在用户名变量后附加每个可能的字符,这似乎不是很pythonic。有更好的方法吗?

是,但是没有。如果不使用乌龟key函数的第二个参数onkeypress(),则在按下any键时,它将调用您的按键处理程序代码。问题是,他们放弃了代码,让您知道哪个键!

我们可以通过重写底层的_onkeypress代码来解决此设计错误,在未设置键(即event.char)的情况下,将tkinter的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()

只需开始在窗口中键入,您的角色就会显示出来。您需要自己处理特殊个字符(例如返回)。

© www.soinside.com 2019 - 2024. All rights reserved.