【问题标题】:for loop don't work on kivy pythonfor 循环不适用于 kivy python
【发布时间】:2017-10-04 03:47:02
【问题描述】:

嗨:我想在 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 中删除一个小部件(屏幕)

【问题讨论】:

  • 您是否正在改变您正在迭代的对象?如果self.remove_widget(screen) 突变self.screens,那将是你的问题。你需要重构。
  • 感谢您的回答,我该如何解决?,创建一个副本?
  • 看我的回答。简而言之,创建一个临时列表来存储您要删除的屏幕。

标签: python-2.7 kivy


【解决方案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)

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

【讨论】:

  • 完全不用担心。如果这解决了问题,您应该支持我的回答并标记为已接受。 :)
猜你喜欢
  • 2014-12-27
  • 2018-03-13
  • 1970-01-01
  • 2014-01-29
  • 2022-01-25
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多