You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用onClick()函数参数失效,如何获取鼠标点击坐标?

解决鼠标点击事件函数的参数与坐标获取问题

首先得明确一个核心点:你绑定的onClick函数是通过信号槽机制由框架自动触发的,正常情况下根本不需要你手动调用它——当用户在场景中点击鼠标时,框架会自动创建对应的MouseClickEvent实例并传入函数,你之前手动传MOUSEPRESSEVENT、MouseClickEvent这些都是不对的,因为需要传入的是事件对象实例,而不是类名。

第一步:修正onClick函数,正确提取坐标

你现在的函数里直接返回(x,y)是错误的,因为x和y没有定义。需要从传入的event对象里获取坐标,根据你打印的<MouseClickEvent (420,306) button=1>来看,这个事件对象应该直接包含x、y属性,或者有获取坐标的方法,修改后的函数应该是这样:

def onClick(event):
    print(event)
    # 从事件对象中提取坐标,根据实际属性调整,比如直接取event.x和event.y
    x = event.x
    y = event.y
    # 或者如果是通过pos()方法获取点对象,再取x、y:
    # pos = event.pos()
    # x = pos.x()
    # y = pos.y()
    print(f"点击坐标:({x}, {y})")
    return (x, y)

第二步:关于手动调用的问题(仅用于测试)

如果只是想测试这个函数的逻辑,你需要手动构造一个MouseClickEvent的实例,传入符合要求的参数。根据你打印的事件格式,这个类应该接受坐标和按钮参数,构造方式大概是这样:

# 构造一个模拟的鼠标点击事件对象
mock_event = MouseClickEvent(x=100, y=200, button=1)
# 调用函数
result = onClick(mock_event)
print(result)  # 会输出(100, 200)

如果是Qt框架下的QMouseEvent(很多场景会用到),构造方式会更规范一些,需要指定事件类型、位置、按钮等:

from PyQt5.QtGui import QMouseEvent
from PyQt5.QtCore import Qt, QPoint

# 构造左键点击事件,位置在(100,200)
mock_event = QMouseEvent(Qt.MouseButtonPress, QPoint(100, 200), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier)
onClick(mock_event)

关键提醒

日常使用中,你只需要保持w1.scene().sigMouseClicked.connect(onClick)这个绑定代码,当用户点击场景时,框架会自动处理事件对象的传递和函数调用,完全不需要你手动触发~

内容的提问来源于stack exchange,提问作者Jaden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:35:56