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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:59:40