for循环不能在kivy python上工作

时间:2017-10-04 03:47:02

标签: python-2.7 kivy

嗨:我想在kivy上做一个简单的应用程序并在循环中出错。

说明:我在ScreenManager中有10个屏幕,我需要清除除4个之外的所有小部件。

按钮on_press调用ScreenManager的update()方法。

错误:在update()方法中,我有以下代码:

   self.static_screens = ['list', 'new', 'conf', 'edit']  # declared in __init__ method

    def update():
        for screen in self.screens:
            if screen.name not in self.static_screens:
                self.remove_widget(screen)

执行正常,但只从ScreenManager中删除一个小部件(屏幕)

1 个答案:

答案 0 :(得分:1)

我不熟悉kivy,但我怀疑问题是你正在改变你正在迭代的对象。许多人在尝试使用for循环删除列表中的特定项目时会遇到类似的问题。

以下是可能解决您问题的重构方法。

def update():
    screens_to_remove = [screen in self.screens if 
                         screen.name not in self.static_screens]
    for screen in screens_to_remove:
        self.remove_widget(screen)

(请注意,我没有对此进行测试,因为我不确定代码的其余部分是什么样的。)