Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用turtle.onScreen单击以查找鼠标单击的坐标_Python_Python 3.4_Turtle Graphics - Fatal编程技术网

Python 使用turtle.onScreen单击以查找鼠标单击的坐标

Python 使用turtle.onScreen单击以查找鼠标单击的坐标,python,python-3.4,turtle-graphics,Python,Python 3.4,Turtle Graphics,我只想使用ScreenClick上的turtle方法来查找鼠标单击的坐标。目前,我有一个网格,我在上面玩奥赛罗。我已经有了将原始坐标转换为游戏可以解释的特定网格坐标的算法。我似乎无法使onscreenclick方法起作用。在文档中,它说使用带有两个参数的“fun”函数。我相信我有这个,但它不起作用。我是python和turtle的初学者,因此任何帮助都将不胜感激:) 你离得太近了 import turtle xclick = 0 yclick = 0 def getcoordinates()

我只想使用ScreenClick上的turtle方法来查找鼠标单击的坐标。目前,我有一个网格,我在上面玩奥赛罗。我已经有了将原始坐标转换为游戏可以解释的特定网格坐标的算法。我似乎无法使onscreenclick方法起作用。在文档中,它说使用带有两个参数的“fun”函数。我相信我有这个,但它不起作用。我是python和turtle的初学者,因此任何帮助都将不胜感激:)

你离得太近了

import turtle

xclick = 0
yclick = 0

def getcoordinates():
    turtle.onscreenclick(modifyglobalvariables) # Here's the change!

def modifyglobalvariables(rawx,rawy):
    global xclick
    global yclick
    xclick = int(rawx//1)
    yclick = int(rawy//1)
    print(xclick)
    print(yclick)

getcoordinates()
找零了吗?语法上,去掉modfiyglobalvariables后面的括号您想要的是传递函数,您正在做的是传递函数的输出。

如果你运行代码,你会得到一个异常(TypeError),说你没有传递正确的参数;这是因为它试图实际调用modifyglobalvariables。你想要的是

bind_to_mouseclick( my_function )
在这种情况下,每次单击鼠标时,都会调用my_函数。此时,它可能提供了正确的参数,也可能没有。相反,你说

bind_to_mouseclick( my_function() )

Python计算my_函数的值,并将调用结果绑定到鼠标单击。如果
my_函数
恰好返回一个函数,那就太好了(可能是我们想要的)。如果它返回一个整数或一个字符串,那就不好了。如上所述,关键是例外;如果函数不需要任何参数,那么这可能会更微妙地检测

实际上,更容易检测单击它的位置。代码如下:

from turtle import *
mouseclickx = 0
mouseclicky = 0
def findcoords(x,y):
    print(x)
    print(y)
    mouseclickx = x
    mouseclicky = y
onscreenclick(findcoords,1)
编辑:
那不行。。。好吧,idk,但它应该是这样的:/如果你想要一件东西,它就去你点击的地方,它的一行
onscreenclick(goto,1)

这不起作用,因为您在函数中遗漏了一个
global
语句(请参见公认的解决方案示例)。另外
onscreenclick(goto)
在理论上很好,但在实践中却是一场灾难——实际上,您调用了一个禁用处理程序的函数,
goto(x,y)
,然后重新启用处理程序。否则,你会得到重叠的乌龟运动和混乱接踵而至。
from turtle import *
mouseclickx = 0
mouseclicky = 0
def findcoords(x,y):
    print(x)
    print(y)
    mouseclickx = x
    mouseclicky = y
onscreenclick(findcoords,1)