1

有人对使用键盘命令在 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()
4

4 回答 4

6

当您指定 import * 时,您不必使用 turtle.,还必须使用 mainloop() 读取(无限循环)来监视用户交互,在您的示例中 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()
于 2013-04-13T14:15:08.277 回答
1
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()

我最近才想出这个。希望能帮助到你!

于 2016-11-09T16:05:23.030 回答
0

当您发出这样的命令时:

move = turtle.Turtle()
showturtle()

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

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()
于 2017-02-27T16:51:07.750 回答
0

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

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)
于 2017-02-27T16:32:11.293 回答