Это потому, что цикл while
выполняется тысячи раз в секунду, поэтому вам придется нажимать чрезвычайно быстро, чтобы myMouse.getPressed()[0]
не возвращать True
несколько раз подряд.
Это довольно ручной способ его кодирования.Неважно, будет ли второе нажатие, например, через 19 секунд после первого, или же они были нажаты в том же (приблизительном) месте.
def Instruction(x):
"""Function Instruction(x) presents instruction text in string x"""
instrText.text = x
myMouse.clickReset()
instrText.draw()
myWin.flip()
# Wait for button press
while not myMouse.getPressed()[0]:
pass
# Button was pressed, now wait for release
while myMouse.getPressed()[0]:
pass
# Button was released, now wait for a press
while not myMouse.getPressed()[0]:
myMouse.clickReset()
# The function ends here, right after second button down
Если вы хотите добавить критерий, что они должны быть нажаты в течениеза короткий промежуток времени вы бы добавили немного больше логики и отслеживания текущего состояния:
# Set things up
from psychopy import visual, event
import time
win = visual.Window()
myMouse = event.Mouse()
interval = 1.0 # window for second click to count as double
press_registered = False
release_registered = False
while True:
# Get press time for first press in a potential double click
if not press_registered and myMouse.getPressed()[0]:
t_press1 = time.time()
press_registered = True
# Detect that the (potential first) click has finished
if press_registered and not myMouse.getPressed()[0]:
press_registered = False
release_registered = True
# If there has been a first click...
if release_registered:
# Listen for second click within the interval
if time.time() - t_press1 < interval:
if myMouse.getPressed()[0]:
break
# Time out, reset
else:
press_registered = False
release_registered = False