我正在使用 PsychoPy,我想在单击鼠标时打印鼠标的位置。
位置的实际打印需要放在 while 循环中。使用下面的代码,当我单击时,我得到不止一条输出线,它们打印相同的位置。我希望每次点击只打印一个输出。
这是我使用的代码:
#!/usr/bin/env python2
from psychopy import visual, core, event
from pyglet.gl import *
width = 600
height = 600
myWin = visual.Window([width,height], color='white',units='pix',monitor='testMonitor')
#This will set the windows units (pixels) to GL units
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0, width, 0, height, -1, 1)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glEnable(GL_BLEND)
glBlendFunc(GL_ZERO, GL_SRC_COLOR)
myMouse = event.Mouse() # will use myWin by default
while True:
#Triangle left
glColor3f(1.0, 0.0, 0.0)
glBegin(GL_TRIANGLES)
glVertex3f(150, 550, 1)
glVertex3f(50, 350, 1)
glVertex3f(250, 350, -1)
glEnd()
if myMouse.getPressed()[0]:
myMouse.clickReset()
print myMouse.getPos()
myWin.flip()
core.quit()
我做错了什么吗? while 循环的“帧速率”是否应该更改?
请您参考如下方法:
我没有使用过该模块,但似乎鼠标事件也会因鼠标
raises 而引发。
你需要
保存鼠标状态以备下次使用
每次迭代,测试按钮 0 的鼠标状态是否上升 → 下降
鼠标状态由 myMouse.getPressed 返回。
所以像这样:
oldMouseIsDown = False
while True:
...
mouseIsDown = myMouse.getPressed()[0]
myMouse.clickReset()
if mouseIsDown and not oldMouseIsDown:
print myMouse.getPos()
oldMouseIsDown = mouseIsDown
