for循环运行的次数超过指定次数。

时间:2016-07-27 05:48:40

标签: python for-loop methods pygame

我一直在尝试在pygame中创建一个下拉菜单。我有一个方法,它采用一个字符串列表,并使用for循环将它们呈现到屏幕上。 for循环如下所示。

        spacer = 0
        for text in range(5):
            spacer += 30
            rect = pygame.Rect(0, spacer, 100, 20)
            pygame.draw.rect(self.surface, (255, 0, 0), rect)
            self.rect_list.append(rect)

我将在for循环中创建的每个矩形附加到列表rect_list。 然后我将列表打印到屏幕上以查看其内容。 Python IDLE窗口被垃圾邮件列入了列表的内容。

for循环中包含的方法是在另一个类Menu的第二个方法中调用的。类Menu中的方法在while循环中调用:

while running:
        for event in pygame.event.get():
            if event.type == pg.QUIT:
                running = False
                pygame.quit()
                quit()

        #--------method being called in while loop----------#
        Menu_Class_Obj.render_menu()
        #--------method being called in while loop----------#
        pygame.display.update()

2 个答案:

答案 0 :(得分:1)

每次呈现菜单时,您都会追加menu_items_rect_list。无论你在该列表中放置什么,都将无限期地留在那里。如果您希望列表开头的列表为空,则需要自己清除它。

答案 1 :(得分:0)

一旦我真正想到了什么是唠叨,我的问题的答案就非常明显了。由于我在while循环中调用包含for循环的方法,因此for循环正在多次运行。我用于此问题的两个解决方案是: 1.设置列表中可以有多少项的限制:

if len(self.rect_list) > 5):
     self.rect_list = self.rect_list[:5]

和两个;删除任何更多的元素,然后删除指定的数字:

if len(self.text_rect_list) > len(self.sub_items):
                del self.text_rect_list[:len(self.sub_items)]