首页 > 解决方案 > 在 Screen 类和 App 类之间共享变量

问题描述

当我运行以下脚本时,它会给出错误:ValueError: KivyMD: App object must be initialized before loading root widget。请参阅https://github.com/HeaTTheatR/KivyMD/wiki/Modules-Material-App#exceptions。我哪里做错了?

from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import Screen,ScreenManager
from kivy.properties import StringProperty
from kivy.uix.label import Label
from kivy.uix.button import Button

kv ='''
ScreenManager:
    Fscr:
    Sscr:
    
<Fscr>:
    name:'fscr'
    MDTextField:
        id:inp
        hint_text:'File location'
        pos_hint:{'center_x':0.5,'center_y':0.5}
        
    
        
        
        
    MDRoundFlatButton:
        text:'To Second Screen'
        pos_hint:{'center_x':0.3,'center_y':0.3}
        on_press:
            root.manager.current='sscr'
            root.manager.screens[1].ids.lbl.text = root.ids.inp.text
           
<Sscr>:
    name:'sscr'
    MDLabel:
        id:lbl
        pos_hint:{'center_x':0.5,'center_y':0.5}
    MDRoundFlatButton:
        text:'To First Screen'
        pos_hint:{'center_x':0.3,'center_y':0.3}
        
        on_press:root.manager.current='fscr'
        '''

class Fscr(Screen):
    pass
class Sscr(Screen):
    pass
sm = ScreenManager()
sm.add_widget(Fscr(name='fscr'))
sm.add_widget(Sscr(name='sscr'))
class MyApp(MDApp):
    
    def build (self):
        df = root.manager.screens[0].ids.inp.text
        print(df)
        
        
       
        return Builder.load_string(kv)
    
        
        
MyApp().run()

我可能会被告知如何去做。

标签: kivy

解决方案


错误已经说明了问题的一切。

ValueError: KivyMD: App 对象必须在加载根小部件之前初始化。

在将任何小部件加载到应用程序之前,您应该先运行应用程序。

也就是说,

MyApp().run()

应该在调用 kivy 小部件实例之前首先运行。

sm = ScreenManager()

sm.add_widget(Fscr(name='fscr'))

sm.add_widget(Sscr(name='sscr'))

应该在那之后。


推荐阅读