kivy - 在 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()
我可能会被告知如何去做。
解决方案
错误已经说明了问题的一切。
ValueError: KivyMD: App 对象必须在加载根小部件之前初始化。
在将任何小部件加载到应用程序之前,您应该先运行应用程序。
也就是说,
MyApp().run()
应该在调用 kivy 小部件实例之前首先运行。
sm = ScreenManager()
sm.add_widget(Fscr(name='fscr'))
sm.add_widget(Sscr(name='sscr'))
应该在那之后。
推荐阅读
- javascript - 从调度中获取价值
- webpack - 2021 年用于 React 的 Webpack 和 Gulp
- vue.js - 输入类型最大长度基于什么函数值
- java - 如何在 Swagger 生成的 REST API 中为不同的响应代码返回不同的对象?
- vaadin - vaadin 14:如何在菜单栏组件中添加和提供填写表单的功能
- python - 遍历查询的复制结果的最佳方法是什么?
- javascript - How to check empty in variable in Google Apps Script
- assembly - 程序集的数值变量修改了前一个
- vbscript - .vbs 用 Sapi 告诉时间,但不中断给定一些打开的进程
- reactjs - React Typescript with Redux - 未处理的拒绝(TypeError):无法在已撤销的代理上执行“设置”