1

所以目前我的代码是

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 行,在主打印 event.pos AttributeError: event member not defined

我怎样才能得到与此代码相同的结果,但是当我单击屏幕并重新单击时,它不会给我一个错误?

4

1 回答 1

3

只需处理异常:

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,您会看到当您单击窗口时会得到一个:ActiveEventMouseMotion

<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

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

于 2014-09-17T20:13:48.023 回答