【问题标题】:How to only do add_widget once in Kivy如何在 Kivy 中只做一次 add_widget
【发布时间】:2020-08-13 15:36:28
【问题描述】:

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

原因是我使用了 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

【问题讨论】:

    标签: python python-3.x kivy kivy-language


    【解决方案1】:

    我已经设法修复它以在 on_leave 事件的环境 GridLayout 中包含 clear_widgets。

    def on_leave(self, *args):
        self.ids.environments.clear_widgets()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多