繁体   English   中英

使用屏幕 1 中的按钮更改 Kivy 屏幕 2 中的 label 文本

[英]Use button in screen 1 to change label text in screen 2 in Kivy

我一直在尝试更改布局2中的label2文本,在layout1中使用button1,但它似乎不起作用,当我按下按钮时没有任何反应

这是代码:

class layout1(GridLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
        self.cols = 2

        self.button1 = Button(text = "Button 1 changes screen 2", on_press = self.change_label)
        self.add_widget(self.button1)

        self.change_button = Button(text = "move to screen 2", on_press = self.change_screen)
        self.add_widget(self.change_button)

    def change_screen(self, instance):
        practice_app.sm.current = "screen2"

    def change_label(self,instance):
        func_layout = layout2()
        func_layout.label2.text = "changed"

class layout2(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.cols = 2

        self.label2 = Label(text = "this should change")
        self.add_widget(self.label2)


class TestApp(App):
    def build(self):
        self.sm = ScreenManager()

        screen1 = Screen(name = "screen1")
        screen1.add_widget(layout1())
        self.sm.add_widget(screen1)

        screen2 = Screen(name = "screen2")
        screen2.add_widget(layout2())
        self.sm.add_widget(screen2)

        return self.sm

if __name__ == "__main__":
   practice_app = TestApp()
   practice_app.run()

有很多方法可以做你想做的事。 由于您没有使用kv ,因此最简单的方法可能是保存对layout2的引用。 这是您的build()方法的修改版本,它可以做到这一点:

class TestApp(App):
    def build(self):
        self.sm = ScreenManager()

        screen1 = Screen(name = "screen1")
        screen1.add_widget(layout1())
        self.sm.add_widget(screen1)

        screen2 = Screen(name = "screen2")
        self.layout2 = layout2()  # save reference to layout2
        screen2.add_widget(self.layout2)
        self.sm.add_widget(screen2)

        return self.sm

然后,在change_label()方法中使用该引用:

def change_label(self,instance):
    # func_layout = layout2()  #  creates a new instance of layout2 (not the one in the GUI)
    func_layout = App.get_running_app().layout2
    func_layout.label2.text = "changed"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM