Kivy add_widget 不显示新的小部件

Kivy add_widget does not show new widgets

我试图在屏幕内的滚动视图中添加小部件,但我不明白代码有什么问题。该代码没有给我任何错误,但它没有显示新的小部件。当按下“添加”按钮时,函数 add() 被调用但它不起作用。

这里有 code.py

class ScreenManagement(ScreenManager):
    pass    
class Screen1(Screen):
    pass    
class Screen2(Screen):
    pass    
class ClassAllScreen(BoxLayout):
    pass        
class ClassApp(App):    
    def add(self):   
        self.s2 = Screen2()    
        layout = GridLayout(cols=3)
        layout.add_widget(Label(text='Test'))
        layout.add_widget(TextInput())
        layout.add_widget(CheckBox())     
        self.s2.ids.widget_list.add_widget(layout)
    def build(self):
        self.root = ClassAllScreen()
        return self.root    
kv = Builder.load_file("main2.kv")    
if __name__ == '__main__':
    ClassApp().run()

和 kv 文件:

<Screen1>:    
    GridLayout:
        cols:1        
<Screen2>:    
    GridLayout:    
        cols:1    
        Button:
            size_hint_y: 0.1
            text: 'add'
            on_release:
                app.add()    
        ScrollView:    
            size_hint: 1, 1
            do_scroll_x: False
            padding: 20
            spacing: 20    
            GridLayout:   
                id: widget_list
                cols: 1
                spacing: 5    
                GridLayout:
                    rows: 1        
<ScreenManagement>:    
    Screen1:
        name: 'screen1'
    Screen2:
        name: 'screen2'    
<ClassAllScreen>:    
    orientation:'vertical'    
    GridLayout:
        cols: 1    
        GridLayout:    
            rows: 1
            size_hint_y: 0.12    
            Button:    
                text: "Screen 2"
                    on_release:
                    app.root.ids.screenmanager.transition.direction = 'right'
                    app.root.ids.screenmanager.current='screen2'    
            Button:    
                text: "Screen 1"    
                on_release:
                    app.root.ids.screenmanager.transition.direction = 'left'
                    app.root.ids.screenmanager.current='screen1'    
        ScreenManagement:
            id:screenmanager

有人可以帮助我吗?

在您的 add() 方法中,代码:

self.s2 = Screen2()

正在创建 Screen2 的新实例。然后您将小部件添加到该新实例。但是,该新实例不是您的 GUI 的一部分。您想要的是将小部件添加到 GUI 中的 Screen2 实例。为此,将上面的代码替换为:

self.s2 = self.root.ids.screenmanager.get_screen('screen2')

此代码使用其 id 获取 ScreenManager,然后将 get_screen() 用于 Screen2 实例。