Python 2.7 对于循环don';我不在kivy python上工作
嗨:我试图在kivy上做一个简单的应用程序,但在循环中出现了一个错误 解释:我在ScreenManager中有10个屏幕,我需要清除除其中4个之外的所有窗口小部件 按下按钮调用ScreenManager的update()方法 错误:在update()方法中,我有以下代码:Python 2.7 对于循环don';我不在kivy python上工作,python-2.7,kivy,Python 2.7,Kivy,嗨:我试图在kivy上做一个简单的应用程序,但在循环中出现了一个错误 解释:我在ScreenManager中有10个屏幕,我需要清除除其中4个之外的所有窗口小部件 按下按钮调用ScreenManager的update()方法 错误:在update()方法中,我有以下代码: self.static_screens = ['list', 'new', 'conf', 'edit'] # declared in __init__ method def 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中删除一个小部件(屏幕)我不熟悉
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)
(请注意,我还没有对此进行测试,因为我不确定代码的其余部分是什么样子。)您是否正在对正在迭代的对象进行变异?如果
self.remove\u小部件(屏幕)
发生变异self.screens
,那么这将是您的问题。您需要重构。谢谢您的回答,我如何修复它?创建副本?请参阅我的答案。简而言之,创建一个临时列表来存储您希望删除的屏幕。一点也不担心。如果这解决了问题,你应该投票表决我的答案,并将其标记为已接受。:)