使用 turtle.onscreenclick 查找鼠标单击的坐标

Using turtle.onscreenclick to find coordinates of a mouse click

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

    import turtle

    xclick = 0
    yclick = 0

    def getcoordinates():
        turtle.onscreenclick(modifyglobalvariables())

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

    getcoordinates()

你离得太近了!

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_function。在这一点上,它可能会或可能不会提供正确的参数。相反你说

bind_to_mouseclick( my_function() )

Python 计算 my_function 并将调用 的 结果绑定到鼠标单击。如果 my_function 碰巧 return 一个函数,那就太好了(也许是我们想要的)。如果它 return 是整数或字符串,那就不好了。关键是异常,如上所述;如果该函数不需要任何参数,则检测起来可能会更微妙

检测点击位置实际上要容易得多。这是代码:

from turtle import *
mouseclickx = 0
mouseclicky = 0
def findcoords(x,y):
    print(x)
    print(y)
    mouseclickx = x
    mouseclicky = y
onscreenclick(findcoords,1)

编辑: 那行不通……好吧,我知道,但它应该是这样的:/如果你想要一个东西,它就会出现在你点击的地方,它的一行;onscreenclick(goto,1)