如何在Python turtle库中将鼠标点击的x、y坐标赋值给变量
Python turtle库点击坐标赋值给自定义变量实现方案
turtle的点击事件回调属于异步触发逻辑,无法直接通过return将坐标返回给外层变量,可以通过以下2种常用方式实现存储:
方案1:使用全局变量(最简实现)
直接在回调函数内通过global声明全局变量,完成赋值:
import turtle # 提前定义全局变量用于存储坐标 click_x = None click_y = None def get_mouse_click_coor(x, y): global click_x, click_y # 坐标赋值给全局变量 click_x = x click_y = y # 只接收一次点击就解绑事件,不需要多次点击可以保留这行 turtle.onscreenclick(None) # 需使用坐标的后续逻辑可以直接在这里调用 turtle.goto(click_x, click_y) turtle.dot(15, "blue") print(f"已存储点击坐标:x={click_x}, y={click_y}") turtle.onscreenclick(get_mouse_click_coor) turtle.mainloop()
后续任意位置都可以直接读取click_x、click_y变量使用。
方案2:使用可变对象存储(避免全局变量)
如果不想使用全局变量,可以用列表、字典这类可变对象存储坐标,不需要额外声明global:
import turtle # 用列表存储坐标,列表为可变对象,函数内部可以直接修改 click_coor = [None, None] def get_mouse_click_coor(x, y): click_coor[0] = x click_coor[1] = y turtle.onscreenclick(None) print(f"已存储点击坐标:x={click_coor[0]}, y={click_coor[1]}") turtle.onscreenclick(get_mouse_click_coor) turtle.mainloop()
注意事项
- 不要尝试在
turtle.mainloop()之后读取坐标值,该方法是阻塞的事件循环,只有窗口关闭才会继续执行后续代码,此时坐标已经失去使用意义 - 所有需要用到点击坐标的业务逻辑,建议直接写在回调函数内部,或者通过
turtle.ontimer()定时轮询判断坐标是否完成赋值
内容的提问来源于stack exchange,提问作者White Owl
相关产品推荐
相关产品推荐

