按按钮更改布局形式 Kivy

Changing layout form on button press Kivy

我是kivy的新手,目前正在尝试申请。我正在编写这段代码,由于下拉菜单,我需要从 boxlayout 开始,但之后我想在按下开始按钮时更改为 Gridlayout。如果有人能给我一个解决方案,我将不胜感激。

    Builder.load_string("""
    
    <CustomDropDown>
        Button:
            text: "Nobara"
            size_hint_y: None
            height: 44
            on_release: root.select("Nobara")
        Button:
            text: "Maki"
            size_hint_y: None
            height: 44
            on_release: root.select("Maki")
            
    """)
    
    class CustomDropDown(DropDown):
        pass
    
    xy = ""

   class MainApp(App):
        def build(self):
            self.startbutton = Button(text='Start',
                            size_hint=(.2, .2),
                            pos_hint={'center_x': .5, 'center_y': .5})
            self.startbutton.bind(on_press=self.on_press_startbutton)
    
            self.dropbutton = Button(text='Karakter',
                            size_hint=(.2, .2),
                            pos_hint={'center_x': .50, 'center_y': .5})
    
            dropdown = CustomDropDown()
            self.dropbutton.bind(on_release=dropdown.open)
            dropdown.bind(on_select = lambda instance, x : setattr(self.dropbutton, 'text', x))
            dropdown.bind(on_select = lambda instance, x : karaktervalasztas(x))
    
            self.visszabutton = Button(text="Kilépés",
                            size_hint=(.2, .2),
                            pos_hint={'center_x': .5, 'center_y': .5})
            self.visszabutton.bind(on_press=self.on_press_visszabutton)
    
            """self.huzasbutton = Button(text=f"Huzas: {len(pakli)}",
                            size_hint=(.2, .2),
                            pos_hint={'center_x': .5, 'center_y': .5})
            self.huzasbutton.bind(on_press=self.on_press_kartyahuzas)"""
    
    
            boxlayout = BoxLayout()
            boxlayout.add_widget(self.startbutton)
            boxlayout.add_widget(self.dropbutton)
            return boxlayout
    
        def on_press_startbutton(self, instance):
            boxlayout = GridLayout(cols=10)
            self.root.clear_widgets()
            self.root.add_widget(self.visszabutton)
            self.root.add_widget(Button(text=f"Huzas: {len(pakli)}", size_hint=(.2, .2), pos_hint={'center_x': .5, 'center_y': .5}, on_press=self.on_press_kartyahuzas))
            self.root.add_widget(Button(text=f"Dobópakli: {len(dobopakli)}", size_hint=(.2, .2), pos_hint={'center_x': .5, 'center_y': .5}, on_press=self.on_press_dobopakli))
            start()
            for i in hand:
                #self.root.add_widget(Button(text=str(i), on_press=lambda *args: self.on_press_kartya()))
                self.root.add_widget(Button(size_hint=(.2, .2), background_normal=i+ '.jpg', on_press=self.on_press_kartya))
            return boxlayout

为什么不从一开始就使用 GridLayout?在你build()方法中:

boxlayout = GridLayout(cols=2, size_hint_y=0.25)

然后,在您的 on_press_startbutton():

    def on_press_startbutton(self, instance):
        # boxlayout = GridLayout(cols=10)
        self.root.clear_widgets()
        self.root.cols = 10
        self.root.size_hint_y = 1.0
        self.root.add_widget(self.visszabutton)
        .
        .
        .

并且 return boxlayout 可以从 on_press_startbutton() 方法中删除。