所以目前我的代码是
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:事件成员不是 定义
如何获得与此代码相同的结果,但是当我点击屏幕并点击返回时,它不会给我一个错误?
答案 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
在您再次单击时,将按下鼠标,因此您尝试处理事件,从而引发异常。最简单的方法就是在发生异常时捕获它。您还可以检查事件类型以决定是否尝试打印。