如何在Kivy中只执行一次add_widget

问题描述

我有一个动态屏幕,它是根据您在另一个屏幕上单击的按钮生成的。每当我进入“屏幕”时,问题就不复存在了,按钮会重新生成并添加到现有按钮中。

原因是我使用了on_enter方法,但是由于这些事件在启动应用程序时发生,所以我不知道如何使用on_kv_post。

每次返回该屏幕时如何初始化屏幕?

class ClientEnvsGrid(Screen):
    envProp = StringProperty('')

    def __init__(self,**kwargs):
        super(ClientEnvsGrid,self).__init__(**kwargs)


    def on_enter(self,*args):
        clientProp = self.manager.get_screen('clientlist').clientProp

        try:
            client_filepath = os.path.join('clients',clientProp,"environments.json")
            client_file = open(client_filepath)

            clientdata = json.loads(client_file.read())

            print(clientdata)

            self.ids.clientlabel.text = clientdata["clientname"]

            for envs in clientdata["environments"]:
                print(envs["name"])
                envbutton = Button(text=envs["name"])
                envbutton.bind(on_press=lambda *args: self.pressed('envbtn',*args))
                self.ids.environments.add_widget(envbutton)
        except:
            print("No client data found")
            self.manager.current = 'clientlist'


    def pressed(self,instance,*args):
        self.envProp = args[0].text

解决方法

我已设法对其进行修复,使其在on_leave事件中的GridLayout环境中包含clear_widgets。

v1

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...