我想显示一个对话框,让实验参与者使用心理模型输入一个数字。当获胜时fullscr=False
,将显示对话框。当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)
答案 0 :(得分:3)
这是因为在fullscr=True
时心理窗口位于其他所有内容之上,因此在您的示例中,创建了对话框,但由于窗口位于顶部,因此用户无法看到该对话框。
如果您只想在实验开始时使用对话框,解决方案很简单:在创建窗口之前显示对话框:
# Import stuff
from psychopy import visual, gui
# Show dialogue box
respInfo={'duration': ''}
respDlg = gui.DlgFromDict(respInfo)
# Initiate window
win = visual.Window(fullscr=True)
如果你想在实验期间中途展示对话,你需要一个非常复杂的黑客攻击。你需要
以下是一些使用单一刺激来演示此方法的代码:
# 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()