首页 > 解决方案 > 按钮文本不更新

问题描述

>> 背景:

我想通过按下 MainScreen 中的 Button 来更新/更改 SecondScreen 中 Button 的文本。好吧,我做了一些研究并做了我想做的事,当我在终端中签入时,文本确实发生了变化。但是,SecondScreen 上显示的文本没有。

>> 这就是我所做的:

((请注意,我仅使用代码片段,我将在下面发布整个代码。))

Button:
    text:"PRESS TO CHANGE TEXT"
    on_press:
        root.funcself() 
        ## on press it goes to it's root and do the "funcself" function in it

这是:

class MainScreen(Screen):
    def funcself(self):
        app.second.funcscreen()
        ## it re-directs to the SecondScreen and do the "funcscreen" function

这是:

class SecondScreen(Screen):
    def funcscreen(self):
        self.ids["button"].text = "SUPPOSED TO CHANGE TO THIS"

然后我通过做检查我是否成功print(self.ids["button"].text),是的!它确实改变了,但是当我导航到下一个屏幕时,显示的文本仍然没有改变。

有人介意帮助和解释吗?

完整代码:

标签: pythonkivy

解决方案


您在应用程序类中定义的second属性是屏幕的新实例,而不是您在屏幕管理器中获得的实例,它是您在 kv 中添加的。这就是为什么当您检查时,您会看到它发生了变化,但不是在正确的实例上。当您再次从主屏幕调用 app.second.func 时,它又是错误的实例。

但是您的应用程序始终有根。在您的情况下,它的网格布局。每个屏幕都有一个经理。有几种方法可以访问它。但是你可以这样做。

在 kv 的主屏幕类中:

Button:
    text:"PRESS TO CHANGE TEXT"
    on_press:
        root.manager.get_screen("second").ids["button"].text = "Something"    

在这里,它获取屏幕管理器,并使用其get_screen()方法获取名为 second 的屏幕,然后是该 kv 规则的 id。


推荐阅读