Psychopy 1.85.1:如何统一缩放所有视觉图像对象适配16:9显示器?
统一调整Psychopy视觉对象尺寸解决16:9屏幕变形问题
嘿,这个场景太熟悉了——一个个改视觉元素尺寸真的是噩梦!刚好在Psychopy 1.85.1里有个简单的批量处理方案,一行代码就能搞定所有已创建的视觉对象,不用逐个修改。
核心原因
Psychopy默认用height作为单位(把窗口高度设为1个单位),但这个单位是基于4:3屏幕设计的。当你在16:9屏幕上运行时,窗口宽度会自动变成16/9≈1.777个单位(而4:3下是4/3≈1.333),导致所有横向元素被拉伸变形。
一行代码批量校正
假设你把所有需要调整的视觉对象(图像、文本、形状等)都存在一个列表里,比如visual_elements = [img_stim, text_stim, rect_stim],直接用这行代码就能统一校正宽度比例:
[setattr(elem, 'width', elem.width * 0.75) if hasattr(elem, 'width') else setattr(elem, 'size', (elem.size[0] * 0.75, elem.size[1])) for elem in visual_elements]
代码解释
0.75是校正因子,计算逻辑是:(4/3) / (16/9) = 0.75,刚好把16:9下被拉伸的宽度缩回到4:3的原始比例。- 用
hasattr判断元素是用width还是size参数,兼容不同类型的视觉组件。
更彻底的预防方案(提前配置)
如果还没创建太多视觉对象,也可以在初始化窗口时就配置正确的显示器参数,从根源避免变形:
from psychopy import monitors, visual # 创建对应16:9屏幕的显示器配置(填写你的实际屏幕宽度和观看距离,单位cm) my_monitor = monitors.Monitor('169_display', width=52.0, distance=60.0) my_monitor.setSizePix((1920, 1080)) # 用这个显示器配置创建窗口,后续所有视觉元素都会自动适配比例 win = visual.Window(size=(1920, 1080), monitor=my_monitor, units='cm')
这样后续创建的所有元素都会基于正确的屏幕宽高比渲染,不用再手动调整啦!
内容的提问来源于stack exchange,提问作者HJT
相关产品推荐
相关产品推荐

