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

问题描述 投票:1回答:2

我只是想在屏幕上使用turtle方法来找到鼠标单击的坐标。目前,我有一个正在玩奥赛罗的网格。我已经有了将原始坐标转换为游戏可以解释的特定网格坐标的算法。我似乎无法使onscreenclick方法正常工作。在文档上,它说要使用带有两个参数的“有趣”功能。我相信我有这个功能,但是没有用。我是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()
python python-3.4 turtle-graphics
2个回答
1
投票

你太近了!

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()

赶上零钱了吗?从句法上讲,在modfiyglobal变量后删除括号。 您想要的是传递函数,您正在做的是传递函数的输出。

如果运行代码,则会收到一个异常(TypeError),表示您没有传递正确的参数;那是因为它实际上试图调用ModifyGlobal变量。减少,您想要的是

bind_to_mouseclick( my_function )

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

bind_to_mouseclick( my_function() )

Python评估my_function,并将通话结果绑定到鼠标单击。如果my_function恰好返回一个函数,那很好(也许就是我们想要的)。如果返回整数或字符串,那就不好了。如上所述,关键是例外。如果该函数不需要参数,则可能检测不到


0
投票

实际上,检测您单击它的位置要容易得多。这是代码:

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)

© www.soinside.com 2019 - 2024. All rights reserved.