【问题标题】:How can I log key presses using turtle?如何使用乌龟记录按键?
【发布时间】:2020-05-11 17:52:30
【问题描述】:

我正在尝试制作一个简单的海龟脚本,询问用户他们的用户名,然后将其存储。我没有任何代码,但如果我使用onkeypress,似乎我必须创建一个函数来将每个可能的字符附加到用户名变量,这似乎不是很pythonic。有没有更好的方法来做到这一点?

【问题讨论】:

    标签: python turtle-graphics coding-efficiency


    【解决方案1】:

    如果我使用 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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2017-08-09
      • 1970-01-01
      相关资源
      最近更新 更多