1

所以这是我的问题,我必须为我的 CS 课拍一张照片,用海龟进行估计真的很令人沮丧。我打算使用 .onclick() 来显示我的位置。

import turtle as t
def getPos(x,y):
    print("(", x, "," ,y,")")
    return

def main():
    t.onclick(getPos)
    t.mainloop()
main()

海龟文档似乎说 onclick 将在一个接受两个变量的函数中传递坐标。

http://docs.python.org/3.1/library/turtle.html#turtle.onclick

注意:当我点击箭头时它会起作用,但这不是我想要的。我想单击屏幕上的其他位置以找出我应该将箭头发送到的坐标!

任何帮助,将不胜感激。

4

6 回答 6

3

您需要使用 Screen 类。但是,如果你想远离 OOP,你可以使用内置的方法turtle.onscreenclick(func)

代替

def main():
    t.onclick(getPos)
    t.mainloop()
main()

def main():
    t.onscreenclick(getPos)
    t.mainloop()
main()
于 2013-04-17T17:04:06.327 回答
2

自己找到解决方案真是太棒了。

你有没有浏览过文档turtle

http://docs.python.org/2/library/turtle.html

看起来您可以导入screen以及turtle从模块导入。 screenonclick自己的事件,可以按照您的期望进行。

请注意以下有关如何访问screen对象的行:

The function Screen() returns a singleton object of a TurtleScreen subclass.
This function should be used when turtle is used as a standalone tool for
doing graphics. As a singleton object, inheriting from its class is not
possible.

免责声明:我以前从未使用过乌龟。

于 2013-04-09T17:32:00.970 回答
0

好吧,我想出了一个解决办法。它不是一个完美的解决方案,但效果很好。因为只有当你点击箭头时 onclick 才会响应,所以我让箭头包含了整个屏幕。然后我把它藏了起来。你需要做的是将鼠标悬停在你想去的位置上,按“a”,当它变黑时点击屏幕。然后外壳将显示您需要的坐标。确保你总是回到 (1000,0)。

import turtle as t

def showTurtle():
    t.st()
    return

def getPos(x,y):
    print("(", x, "," ,y,")")
    return

def hideTurtle(x,y):
    t.ht()
    return

def main():
    t.speed(20)
    t.shapesize(1000,1000)
    t.up()
    t.goto(1000,0)
    t.ht()
    t.onkey(showTurtle,"a")
    t.listen()
    t.onclick(getPos)
    t.onrelease(hideTurtle)
    t.mainloop()
main()

此外,如果我班上的任何人发现这个,我是宾厄姆顿的一名 CS 学生,如果你使用这个,我建议不要留下任何痕迹。教授已经看到了这一点,并且会认出它。

于 2013-04-09T17:27:45.060 回答
0

您必须首先获取海龟正在绘制的屏幕对象,然后调用屏幕对象的 onclick()。这是一个例子:

import turtle as t

def getPos(x,y):
    print("(", x, "," ,y,")")
    return

def main():
    s = t.getscreen()
    s.onclick(getPos)
    t.mainloop()

main()
于 2017-03-15T07:32:27.490 回答
0

Python 3.7 版本。

import turtle as t

def click(x,y):
  print('Clicked:', x, y)

def main():
  s = t.Screen()
  s.onclick(click)

  s.mainloop()

main()

请注意,打印是在控制台上进行的,而不是在 Turtle 上。

于 2019-10-10T11:40:29.420 回答
0

我有一个小的儿童编码器,但我学到了很多东西。

我喜欢只为有人说你创造了好东西而编写代码,但我也喜欢分享我学到的东西。

你来这里是为了代码onclick 代码这里

您需要执行以下操作:

# import package 
import turtle 
   
# screen object 
wn = turtle.Screen() 
  
# method to perform action 
def fxn(x, y): 
  turtle.goto(x, y) 
  turtle.write(str(x)+","+str(y)) 
  
# onclick action  
wn.onclick(fxn) 
wn.mainloop()`

现在,只需点击屏幕,看看魔术

于 2020-10-07T08:16:30.320 回答