我正试图通过Python龟获得鼠标位置。一切正常,只是我不能让乌龟跳到鼠标点击的位置。
import turtle
def startmap(): #the next methods pertain to drawing the map
screen.bgcolor("#101010")
screen.title("Welcome, Commadore.")
screen.setup(1000,600,1,-1)
screen.setworldcoordinates(0,600,1000,0)
drawcontinents() #draws a bunch of stuff, works as it should but not really important to the question
turtle.pu()
turtle.onclick(turtle.goto)
print(turtle.xcor(),turtle.ycor())
screen.listen()
据我所知,“turtle.onclick(turtle.goto)”这一行应该将乌龟发送到我点击鼠标的地方,但事实并非如此。打印线是一个测试,但它只返回我最后发送的位置,名义上(0,650)虽然这没有重大意义。
我尝试在pydoc中查找教程,但到目前为止我还没能成功写出来。
感谢您的帮助。谢谢。
编辑:我需要乌龟去点击位置(完成),但我也需要它来打印坐标。
答案 0 :(得分:6)
您正在寻找onscreenclick()
。这是TurtleScreen
的一种方法。 Turtle
的{{3}}方法指的是鼠标本身的鼠标点击。令人困惑的是,onclick()
TurtleScreen
方法与其onscreenclick()
方法相同。
24.5.4.3。使用屏幕事件
onclick()
turtle.onclick
(有趣, btn = 1 , add =无)
turtle.onscreenclick
(有趣, btn = 1 , add =无)¶参数:
- fun - 一个带有两个参数的函数,将使用画布上单击的点的坐标调用
- num - 鼠标按钮的编号,默认为1(鼠标左键)
- 添加 -
True
或False
- 如果True
,将添加一个新绑定,否则它将替换以前的绑定将 fun 绑定到此屏幕上的鼠标单击事件。如果 fun
None
,则会删除现有的绑定。名为
screen
的TurtleScreen实例和名为turtle的Turtle实例的示例:
>>> screen.onclick(turtle.goto) # Subsequently clicking into the TurtleScreen will
>>> # make the turtle move to the clicked point.
>>> screen.onclick(None) # remove event binding again
注意:此TurtleScreen方法仅作为全局函数使用,名称为
onscreenclick
。全局函数onclick
是另一个源自Turtle方法onclick
的函数。
因此,只需调用screen
而不是turtle
的方法。它就像将其改为:
screen.onscreenclick(turtle.goto)
如果您输入了turtle.onclick(lambda x, y: fd(100))
(或类似的东西),您可能会看到乌龟在您点击时向前移动。使用goto
作为fun
参数,您会看到乌龟去...它自己的位置。
如果你想在每次移动时打印,你应该定义自己的功能,这样做,并告诉龟去某个地方。我认为这会有效,因为turtle
是一个单身人士。
def gotoandprint(x, y):
gotoresult = turtle.goto(x, y)
print(turtle.xcor(), turtle.ycor())
return gotoresult
screen.onscreenclick(gotoandprint)
如果turtle.goto()
返回None
(我不知道),那么你实际上可以这样做:
screen.onscreenclick(lambda x, y: turtle.goto(x, y) or print(turtle.xcor(), turtle.ycor())
如果有效,请告诉我。我的计算机上没有tk,所以无法测试。