主,
我使用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()
答案 0 :(得分:0)
我认为,你的kv文件在构建按钮时只分配一次文本,所以如果你想稍后更改这个文本,你应该将文本重新分配给按钮(阅读关于ObjectProperty和kv id here)
答案 1 :(得分:0)
根据定义,两个原始Screen类的实例化将产生两个不同的“数字数字属性”,这些属性仅在本地可见,而不是在 app 级别;无论如何,他们没有联系。
在跨屏幕共享流程时,我将所有与事件相关的代码和共享信息放在 ScreenManager 中。然后,与事件相关的代码可以访问和操作ScreenManager中实例化的类的所有方法和属性(这包括Screen类本身)。您还可以通过 root.manager 从KV文件轻松访问这些方法和属性。