为什么我的对话框不显示fullscr=True时



我想显示一个对话框,要求实验参与者输入一个数字,使用psychopy。当"fullscr=False"在win时,弹出对话框。当fullscr=True时,它不出现,即使输入数字然后返回,也会使程序进入下一个循环。

知道为什么吗?相关代码行如下

from psychopy import visual, event, core, data, gui, logging
win = visual.Window([1024,768], fullscr=True, units='pix', autoLog=True)
respInfo={}
respInfo['duration']=''
respDlg = gui.DlgFromDict(respInfo)

这是因为当fullscr=True时,psychopy窗口位于其他所有内容的顶部,因此在您的示例中,对话框被创建但对用户不可见,因为窗口位于顶部。

对话框在开头

如果您只想在实验开始时显示对话框,解决方法很简单:在创建窗口之前显示对话框:

# Import stuff
from psychopy import visual, gui
# Show dialogue box
respInfo={'duration': ''}
respDlg = gui.DlgFromDict(respInfo)
# Initiate window
win = visual.Window(fullscr=True)

中间出现对话框

如果你想在实验过程中显示对话,你需要一个相当复杂的hack。你需要

  1. 关闭当前窗口
  2. 显示对话框(可选择在后台有一个非全屏窗口,以覆盖您的桌面)
  3. 创建一个新窗口(并关闭步骤2中的可选窗口)
  4. 设置在新窗口中呈现的所有刺激。由于刺激指向第一个窗口对象,因此仅使用相同的变量名称创建一个新窗口(新对象)将无法达到此目的。

下面的一些代码用单个刺激来演示这种方法:

# Import stuff, create a window and a stimulus
from psychopy import visual, event, gui
win1 = visual.Window(fullscr=True)
stim = visual.TextStim(win1)  # create stimulus in win1
# Present the stimulus in window 1
stim.draw()
win1.flip()
event.waitKeys()
# Present dialogue box
win_background = visual.Window(fullscr=False, size=[5000, 5000], allowGUI=False)  # optional: a temporary big window to hide the desktop/app to the participant
win1.close()  # close window 1
respDict = {'duration':''}
gui.DlgFromDict(respDict)
win_background.close()  # clean up the temporary background  
# Create a new window and prepare the stimulus
win2 = visual.Window(fullscr=True)
stim.win = win2  # important: set the stimulus to the new window.
stim.text = 'entered duration:' + respDict['duration']  # show what was entered
# Show it!
stim.draw()
win2.flip()
event.waitKeys() 

相关内容

  • 没有找到相关文章

最新更新