Python 3.0使用turtle.onclick

时间:2013-04-09 04:20:27

标签: python onclick coordinates turtle-graphics

所以这是我的问题,我必须为我的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

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

任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:2)

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

替换

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

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

答案 1 :(得分:1)

很棒的工作,自己找出解决方案。

您是否浏览过turtle的文档?

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

您似乎可以从模块中导入screen以及turtlescreen有自己的onclick事件,可以达到预期效果。

请注意以下关于如何访问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.

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

答案 2 :(得分:0)

好吧,我想出了一个解决方法。它不是一个完美的解决方案,但它运作良好。因为onclick只会在你单击箭头时响应,我让箭头包含整个屏幕。然后我把它藏了起来。您需要做的是将鼠标悬停在您想要去的位置,按“a”,当它变黑时单击屏幕。然后shell将显示您需要的坐标。确保你总是回到(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()

另外,如果我班上的任何人发现这个,我是binghamton的CS学生,如果你使用这个,我建议不留痕迹。教授已经看到了这一点,并将认识到它。

答案 3 :(得分: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()

答案 4 :(得分: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上进行的。

答案 5 :(得分:-1)

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

我只想编码,因为有人说你创造了很好的东西,但是我也喜欢分享我学到的东西。

您来到这里的原因是 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()`

现在,只需在屏幕上单击并查看魔术