按住鼠标时如何检查pygame

时间:2014-09-17 20:08:33

标签: python python-2.7 pygame mouse mouse-position

所以目前我的代码是

import pygame

def main():
    pygame.init()

    size = width, height = 800,700
    backgroundColor = [0, 0, 255]


    screen = pygame.display.set_mode(size)

    screen.fill(backgroundColor)

    pygame.display.flip()

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                return
            if pygame.mouse.get_pressed()[0]:
                print event.pos

main()

我想要做的是当用户按住鼠标时,正在记录光标的位置。我有什么工作,除非你点击屏幕,然后点击屏幕上的,如果给出错误:

  

第23行,在主打印事件中.pos AttributeError:事件成员不是   定义

如何获得与此代码相同的结果,但是当我点击屏幕并点击返回时,它不会给我一个错误?

1 个答案:

答案 0 :(得分:2)

只需处理异常:

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            return
        if pygame.mouse.get_pressed()[0]:
            try:
                print event.pos
            except AttributeError:
                pass

如果您在每次迭代时打印出event本身,除了正常ActiveEvent之外,当您点击窗口时,您会看到MouseMotion事件:

<Event(4-MouseMotion {'buttons': (0, 0, 0), 'pos': (703, 14), 'rel': (10, -12)})>
<Event(4-MouseMotion {'buttons': (0, 0, 0), 'pos': (714, 1), 'rel': (11, -13)})>
<Event(1-ActiveEvent {'state': 1, 'gain': 0})>  # clicked off
<Event(1-ActiveEvent {'state': 1, 'gain': 1})>  # clicked on

在您再次单击时,将按下鼠标,因此您尝试处理事件,从而引发异常。最简单的方法就是在发生异常时捕获它。您还可以检查事件类型以决定是否尝试打印。