使用Python与PsychoPy类绘制窗口文本无显示问题求助
解决你的PsychoPy文本不显示问题
嘿,我一眼就发现问题所在啦!你看不到文本的核心原因是单位不匹配:
你创建窗口时用了units='deg'(度数单位),但定义TextStim的pos参数时,却用了像素值winsize[0]/4和winsize[1]/4。这就像用米来量厘米的距离,文本直接被放到了屏幕可视范围之外,自然看不到啦。
下面给你两种修复方案,以及调整后的完整代码:
方案1:统一使用度数单位设置位置
直接把pos改成符合度数单位的坐标,比如把文本放在屏幕中央附近,更适合展示指导语:
from psychopy import visual, core, event winsize=[1536, 864] mywin = visual.Window(winsize, monitor='testMonitor', units='deg',allowGUI=False, winType='pyglet',fullscr=True, color = 'dimgrey',colorSpace ='rgb') class TextStimHandler(): def __init__(self, win, txt='Unicorn'): self.window = win # 用度数单位设置位置,[0,0]对应屏幕中心 self.text = visual.TextStim( win, text=txt, font=['Gill Sans MT', 'Arial','Helvetica','Verdana'], pos=[0, 0], units='deg', alignHoriz='center', wrapWidth=20, # 用度数定义换行宽度,适配屏幕 alignVert='center', height=1.0, color='gainsboro' ) def set_text(self, txt): self.text.setText(txt) def show_until_spacebar(self): while True: self.text.draw() self.window.flip() # 清空事件队列,避免按键累积导致多次触发 keys = event.getKeys(['space']) if keys: event.clearEvents() break welcome = TextStimHandler(mywin) welcome.set_text("Hello!\n\nThank you for participating!") welcome.show_until_spacebar() # 程序结束时记得关闭窗口、退出核心进程 mywin.close() core.quit()
方案2:切换为像素单位匹配你的位置逻辑
如果你想保留像素位置的设置习惯,可以把TextStim的units改成'pix',同时调整文本高度适配像素单位:
# 仅修改类中的TextStim初始化部分 self.text = visual.TextStim( win, text=txt, font=['Gill Sans MT', 'Arial','Helvetica','Verdana'], pos=[win.size[0]/4, win.size[1]/4], # 直接用窗口的像素尺寸 units='pix', alignHoriz='left', wrapWidth=win.size[0]/2, alignVert='top', height=20, # 像素单位下设置合适的文本高度 color='gainsboro' )
额外小提示:
- 类名建议用大驼峰命名法(比如
TextStimHandler),更符合Python编码规范 - 程序结束时一定要关闭窗口并退出core,避免残留进程影响后续运行
内容的提问来源于stack exchange,提问作者Inga
相关产品推荐
相关产品推荐

