Kivy清除Builder以卸载Widgets

时间:2015-10-21 13:29:47

标签: python kivy

我有一个带有两个屏幕的应用程序登录屏幕和秘密屏幕。 登录屏幕由kv文件生成并自动加载。

如果提交了登录数据,我的应用程序会解密connected.py并导入它。

我的connected.py看起来像:

    secret_kv = '''
    <Connected>:
        RelativeLayout:
                id: layout

    class Connected(Screen):

        Builder.load_string(secret_kv)
        def __init__(self, **kwargs):
        super(Connected, self).__init__(**kwargs)

    def disconnect(self):
        self.manager.transition = SlideTransition(direction="right")
        self.manager.current = 'login'
        self.manager.get_screen('login').resetForm()
        self.manager.remove_widget(self.manager.get_screen('connected'))
        del sys.modules["connected"]

    def remove(self):
        print self.remove_widget('raised_button')

现在我的问题:

它运行正常,但每次登录都会触发Builder.load_string(secret_kv),因此秘密屏幕的布局会再次出现并覆盖其他布局!

是否可以通过触发Builder.load_string()某事disconnect(self)来清除like Builder.**unload**_string()

我尝试用del sys.modules["connected"]卸载模块,但Kivy会保留所有包含小部件的秘密屏幕!

如果有一个棘手的python或kivy方法清除注销disconnect(self)所有对象和数据,那就太好了。

由于

1 个答案:

答案 0 :(得分:1)

我找到了使用多个kv和py文件的解决方案!

from lang import Builder
Builder.load_file('filename.kv')
Builder.unload_file('filename.kv') 

main_widget.clear_widgets()