使用screenmanager通过第二个屏幕更改文本

时间:2017-06-12 23:57:33

标签: kivy

主,

我使用Component.FindObjectsByType<T>() 制作两个屏幕。在我的第一个屏幕上,我想显示(更改)数字。在我的第二个屏幕上,我想通过单击按钮来更改此数字。不幸的是,如果我回到我的第一个屏幕,这个数字仍然是旧的。我该如何更新? Screenmanager似乎不够吗?

main.py

NumericProperty()

my.kv

import kivy
kivy.require('1.7.0')
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import NumericProperty

class Home(Screen):
    number = NumericProperty()


class Change(Screen):
    number = NumericProperty()

class MyApp(App):
    def build(self):
        self.number = 0
        root = ScreenManager()
        self.home = Home(name='home', number=self.number)
        root.add_widget(self.home)
        self.change = Change(name='change', number=self.number)
        root.add_widget(self.change)
        root.current = 'home'
        return root

    def go_to_change_screen(self):
        self.root.current = 'change'

    def changenumber(self):
        self.number = 1
        self.root.current = 'home'

if __name__ == '__main__':
    MyApp().run()

2 个答案:

答案 0 :(得分:0)

我认为,你的kv文件在构建按钮时只分配一次文本,所以如果你想稍后更改这个文本,你应该将文本重新分配给按钮(阅读关于ObjectProperty和kv id here

答案 1 :(得分:0)

根据定义,两个原始Screen类的实例化将产生两个不同的“数字数字属性”,这些属性仅在本地可见,而不是在 app 级别;无论如何,他们没有联系。

在跨屏幕共享流程时,我将所有与事件相关的代码和共享信息放在 ScreenManager 中。然后,与事件相关的代码可以访问和操作ScreenManager中实例化的类的所有方法和属性(这包括Screen类本身)。您还可以通过 root.manager 从KV文件轻松访问这些方法和属性。