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

求助:PsychoPy 2022.2.4中Pygame MOUSEBUTTONUP事件报错,需兼容PsychoJS

解决PsychoPy中点击图片重播音频的问题(兼容Python与PsychoJS)

你的错误是混淆了PsychoPy的event模块与pygame的事件对象,且使用了无法兼容PsychoJS的pygame API。以下是可跨平台运行(本地Python+在线PsychoJS)的解决方案:

核心思路

放弃pygame依赖,改用PsychoPy原生组件与API,确保代码能直接转换为PsychoJS。需要用到的组件:

  • Mouse组件(检测点击)
  • ImageStim组件(目标点击图片)
  • Sound组件(需重播的音频)

具体实现步骤

  1. 在Builder界面添加上述三个组件,分别命名为mouse、clicked_image、mysound:

    • mysound需取消勾选「Auto start」,避免自动播放
    • mouse可勾选「Visible」显示鼠标指针
  2. 添加代码组件,设置代码类型为「Both」(同时生成Python与JS代码),在「每一帧」(Each Frame)标签下写入以下代码:

Python 代码(自动适配本地运行)

if mouse.isPressedIn(clicked_image):
    # 停止当前音频并从头播放,loops=0表示仅播放一次
    mysound.stop()
    mysound.play(loops=0)

PsychoJS 代码(若自动转换异常,手动补充)

if (mouse.isPressedIn(clicked_image)) {
    mysound.stop();
    mysound.play({loops: 0});
}

关键说明

  • mouse.isPressedIn()是PsychoPy跨平台原生方法,直接检测鼠标点击是否落在目标刺激上,无需手动处理坐标碰撞,比pygame的collidepoint更可靠且兼容JS
  • 音频播放参数:Python中loops=0表示不循环(仅播放一次),JS中对应语法为{loops: 0},代码组件设为「Both」时大部分可自动转换
  • 无需导入pygame,所有操作基于PsychoPy原生组件,确保实验能正常导出并在线运行

错误原因复盘

你之前的代码存在两个问题:

  1. 误用event.type:PsychoPy的event模块没有type属性,这是pygame的事件对象属性,两者不能混用
  2. 语法错误:if clicked_image.rect.collidepoint(pos)缺少冒号:,且该写法依赖pygame,无法在PsychoJS中运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:25:21