Skip to main content
 首页 » 编程设计

python之在 While 循环中单击鼠标(PsychoPy)

2025年05月04日11Terrylee

我正在使用 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