kivy.uix.screenmanager.ScreenManagerException:没有名称为“ScreenOne”的屏幕

问题描述 投票:0回答:1

当我尝试从弹出窗口更改屏幕窗口中的值时,出现此错误

这是代码:

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". 

两者都不起作用。

我不知道还能尝试什么

python kivy popup screen
1个回答
0
投票

我玩了一会儿,这对我有用:

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()
© www.soinside.com 2019 - 2024. All rights reserved.