嗨:我想在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中删除一个小部件(屏幕)
答案 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)
(请注意,我没有对此进行测试,因为我不确定代码的其余部分是什么样的。)