求助: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组件(需重播的音频)
具体实现步骤
在Builder界面添加上述三个组件,分别命名为
mouse、clicked_image、mysound:mysound需取消勾选「Auto start」,避免自动播放mouse可勾选「Visible」显示鼠标指针
添加代码组件,设置代码类型为「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原生组件,确保实验能正常导出并在线运行
错误原因复盘
你之前的代码存在两个问题:
- 误用
event.type:PsychoPy的event模块没有type属性,这是pygame的事件对象属性,两者不能混用 - 语法错误:
if clicked_image.rect.collidepoint(pos)缺少冒号:,且该写法依赖pygame,无法在PsychoJS中运行
内容的提问来源于stack exchange,提问作者Constantina
相关产品推荐
相关产品推荐

