对于pygame.event.get()中的事件:不起作用

时间:2016-03-13 17:38:01

标签: python-3.x pygame

我有以下代码:

while OS_ON:
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        OS_ON = False
    if event.type == pygame.MOUSEBUTTONDOWN:
        x, y = pygame.mouse.get_pos()
        if x > 63 and x < 143 and y > 298 and y < 378:
            Calculator = True
            while Calculator:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        OS_ON = False
                    if event.type == pygame.MOUSEBUTTONDOWN:
                        x, y = pygame.mouse.get_pos()
                        if x > 180 and x < 218 and y > 670 and y < 708:
                            Calculator = False

在我的第一个循环中for event in pygame.event.get():有效,但是当我在第二个循环中再次使用它时,我不再工作了。你知道怎么修理它所以它在展位循环中工作。

1 个答案:

答案 0 :(得分:0)

在python 3.x中,pygame.event.get()被设为一个生成器,所以一旦你从它中检索了一个值,它就会变好。您可以先尝试将其内容保存到列表中:

while OS_ON:
    events = list(pygame.event.get())
    for event in events:
        if event.type == pygame.QUIT:
            OS_ON = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            x, y = pygame.mouse.get_pos()
            if x > 63 and x < 143 and y > 298 and y < 378:
                Calculator = True
                while Calculator:
                    for event2 in events: # 'event' is used in the outer loop
                        if event2.type == pygame.QUIT:
                            OS_ON = False
                        if event2.type == pygame.MOUSEBUTTONDOWN:
                            x, y = pygame.mouse.get_pos()
                            if x > 180 and x < 218 and y > 670 and y < 708:
                                Calculator = False

但是如果你真的需要做这样的事情,那么你真的需要重新设计你的代码,这样它每帧只能使用一个pygame.event.get()