【问题标题】:Python Turtle Graphics Keyboard CommandsPython Turtle 图形键盘命令
【发布时间】:2013-04-13 07:13:54
【问题描述】:

有人对在 python 2.7 中使用键盘命令控制海龟图形有任何见解吗?我对这个网站和其他网站进行了广泛的研究,觉得我在做正确的事情,但它只是不想为我工作。以下是我到目前为止所拥有的,谁能告诉我我哪里出错了????

from turtle import *
turtle.setup(500, 500)
wn = turtle.Screen()
wn.title("Turtle Keys")
move = turtle.Turtle()
showturtle()

def k1():
move.forward(45)

def k2():
move.left(45)

def k3():
move.right(45)

def k4():
move.back(45)

wn.onkey(k1, "Up")
wn.onkey(k2, "Left")
wn.onkey(k3, "Right")
wn.onkey(k4, "Down")

wn.listen()

【问题讨论】:

    标签: python-2.7 keyboard-events turtle-graphics


    【解决方案1】:

    当您指定 import * 时,您不必使用 turtle.,您还必须使用 mainloop() read(无限循环)来监视用户交互,在您的示例中 wn 也是不必要的。

    这是工作代码...

    from turtle import *
    setup(500, 500)
    Screen()
    title("Turtle Keys")
    move = Turtle()
    showturtle()
    
    def k1():
        move.forward(45)
    
    def k2():
        move.left(45)
    
    def k3():
        move.right(45)
    
    def k4():
        move.back(45)
    
    onkey(k1, "Up")
    onkey(k2, "Left")
    onkey(k3, "Right")
    onkey(k4, "Down")
    
    listen()
    mainloop()
    

    【讨论】:

    • 完全按照预期运行,代码运行正常。但我试着以我熟悉的方式接近乌龟。 >>>导入海龟 >>>turtle.fd(0)。然后我创建一个方向函数,然后调用传递方向函数和键名作为参数的 onkey 函数,我得到一个回溯错误。为什么会发生这种情况?
    • 查看我对move = Turtle(); showturtle() 的回答,因为它解释了为什么这会导致屏幕上显示两只海龟而不是一只。而你的Screen() 电话什么也没增加。我认为import turtle * 是合理的,因为它是为初学者设计的,所以我建议在我的回答中使用另一种方法来避免这类错误。
    【解决方案2】:
    import turtle
    
    image = "C:/Python27/PythonProgramming/picture.gif"
    screenr = turtle.Screen()
    
    Lewi = turtle.Turtle()
    
    screenr.addshape(image)
    Lewi.shape(image)
    
    Lewi.penup()
    
    
    
    def up():
        Lewi.sety(Lewi.ycor()+10)
    
    def down():
        Lewi.sety(Lewi.ycor()-10)
    
    def left():
        Lewi.forward(-10)
    
    def right():
        Lewi.forward(10)
    
    
    
    
    
    screenr.onkey(up, "Up")
    screenr.onkey(down, "Down")
    screenr.onkey(right, "Right")
    screenr.onkey(left, "Left")
    screenr.listen()
    
    turtle.mainloop()
    

    我最近才想到这个。希望对您有所帮助!

    【讨论】:

    • 顺便说一句,image.gif 不是必需的。如果你只想要一只乌龟,那就别写了。
    【解决方案3】:

    我发现使用上面的代码和我的示例代码,直到我点击窗口才注册按键。在我的示例中,乌龟会移动,但在我单击窗口之前不会发生左/右动作。

    import turtle
    
    def rightTurn():
       bob.rt(90)
    
    def leftTurn():
       bob.lt(90)
    
    
    wn=turtle.Screen()
    wn.bgcolor('lightblue')
    
    bob=turtle.Turtle()
    
    wn.onkeypress(rightTurn, "Right")
    wn.onkeypress(leftTurn, "Left")
    wn.listen()
    
    
    while True:
       bob.fd(1)
    

    【讨论】:

      【解决方案4】:

      当你发出这样的命令时:

      move = turtle.Turtle()
      showturtle()
      

      你实际上是在和两个不同的海龟交谈,你的海龟对象在'move'和默认海龟。大多数屏幕和默认海龟方法可以在没有显式对象的情况下调用,因为它们也是顶级函数。为避免混淆,我建议您始终以这种方式导入海龟:

      from turtle import Turtle, Screen
      

      并显式创建您自己的海龟和屏幕对象。这样,您将无法调用替代功能,也不会感到困惑。考虑到上述内容重写了您的示例:

      from turtle import Turtle, Screen
      
      screen = Screen()
      
      screen.setup(500, 500)
      screen.title("Turtle Keys")
      
      move = Turtle(shape="turtle")
      
      def k1():
          move.forward(10)
      
      def k2():
          move.left(45)
      
      def k3():
          move.right(45)
      
      def k4():
          move.backward(10)
      
      screen.onkey(k1, "Up")
      screen.onkey(k2, "Left")
      screen.onkey(k3, "Right")
      screen.onkey(k4, "Down")
      
      screen.listen()
      
      screen.exitonclick()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-19
        • 2017-11-09
        • 1970-01-01
        • 2020-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-11
        相关资源
        最近更新 更多