当我尝试从弹出窗口更改屏幕窗口中的值时,出现此错误
这是代码:
test.py 文件:
import kivy
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.uix.popup import Popup
class ScreenOne(Screen):
pass
class MyPopup(Popup):
def channge(self):
Manager().get_screen("ScreenOne").lb.text = "this text" # this one don't to work
class Manager(ScreenManager):
pass
kv = Builder.load_file("test.kv")
class appApp(App):
def build(self):
return kv
if __name__ == "__main__":
appApp().run()
test.kv 文件:
#:import Factory kivy.factory.Factory
Manager:
ScreenOne:
<ScreenOne>:
name: "ScreenOne"
GridLayout:
cols: 1
Label:
id: lb
text: "Text"
Button:
text: "go to popup"
on_press: Factory.MyPopup().open()
<MyPopup>:
name: "MyPopup"
size_hint: .4,.8
GridLayout:
oriental: "vertical"
cols: 2
Button:
text: "chance text in Screen"
on_press: root.channge()
我尝试使用这个命令;
Manager().get_screen("ScreenOne").ids.lb.text = "this text"
和
ScreenOne.ids.lb.text = "this text".
两者都不起作用。
我不知道还能尝试什么
我玩了一会儿,这对我有用:
import kivy
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.uix.popup import Popup
class ScreenOne(Screen):
pass
class MyPopup(Popup):
pass
class Manager(ScreenManager):
def channge(self):
self.get_screen("ScreenOne").ids.lb.text = "this text"
kv = Builder.load_file("test.kv")
class appApp(App):
def build(self):
return kv
if __name__ == "__main__":
appApp().run()
以及 kv 文件:
#:import Factory kivy.factory.Factory
Manager:
ScreenOne:
<ScreenOne>:
name: "ScreenOne"
GridLayout:
cols: 1
Label:
id: lb
text: "Text"
Button:
text: "go to popup"
on_press: Factory.MyPopup().open()
<MyPopup>:
name: "MyPopup"
size_hint: .4,.8
GridLayout:
oriental: "vertical"
cols: 2
Button:
text: "chance text in Screen"
on_press: app.root.channge()