Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在kivy中使用python将变量从一个屏幕更改为另一个屏幕_Python_Kivy - Fatal编程技术网

在kivy中使用python将变量从一个屏幕更改为另一个屏幕

在kivy中使用python将变量从一个屏幕更改为另一个屏幕,python,kivy,Python,Kivy,我有一个两屏的kivy应用程序,我想使用python将一个变量从一个屏幕传递到另一个屏幕 python文件 from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.screenmanager import ScreenManager, Screen from kivy.properties import StringProperty,ObjectProperty from kivy.uix.l

我有一个两屏的kivy应用程序,我想使用python将一个变量从一个屏幕传递到另一个屏幕

python文件

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty,ObjectProperty
from kivy.uix.label import Label

class MenuScreen(Screen):
    label1=StringProperty()
    label2=StringProperty()
    def __init__(self,**kwargs):
        super(MenuScreen, self).__init__(**kwargs)  
        self.label1="hello"
        self.label2="world" 
    def change_text(self):          
        lbl1=self.label1+ " and "
        lbl2= "A beautiful "+self.label2
        chg=SettingsScreen()
        chg.UpdateSettings(lbl1,lbl2)

        # HERE: something like



class SettingsScreen(Screen):
    label3=StringProperty()
    label4=StringProperty()
    def __init__(self,**kwargs):
        super(SettingsScreen, self).__init__(**kwargs)  
        #some default texts
        self.label3="Nothing"
        self.label4="Nothing"
    def UpdateSettings(self,lbl1,lbl2):
        print(lbl1,lbl2)
        self.label3=lbl1
        self.label4=lbl2

class TestScreenManager(ScreenManager):
    menu_screen=ObjectProperty(None)
    settings_screen=ObjectProperty(None)

class TestApp(App):
    def build(self):            
        return  TestScreenManager()

TestApp().run()
kvfile

#: import ScreenManager kivy.uix.screenmanager.ScreenManager
#: import Screen kivy.uix.screenmanager.ScreenManager
#: import SettingsScreen screen


<TestScreenManager>:
    id: screen_manager
    menu_screen: menu_screen
    settings_screen: settings_screen

    MenuScreen:
        id: menu_screen
        name: 'menu'
        manager: screen_manager
    SettingsScreen:
        id: settings_screen
        name: 'settings_screen'
        manager: screen_manager


<MenuScreen>:
    name: 'MenuScreen'
    BoxLayout:
        Label:
            text:root.label1
        Label:
            text:root.label2
        Button:
            text: 'Goto nn'
            size_hint_y:0.2
            on_press: 
                root.manager.current = 'settings_screen'
                root.change_text()


<SettingsScreen>:
    #name: 'SettingsScreen'
    label_id: label_field
    BoxLayout:
        Label:
            text:root.label3
        Label:
            text:root.label4
        Label:
            id: label_field
            text: "some text"
#:导入ScreenManager kivy.uix.ScreenManager.ScreenManager
#:导入屏幕kivy.uix.screenmanager.screenmanager
#:导入设置屏幕
:
id:屏幕管理器
菜单屏幕:菜单屏幕
设置屏幕:设置屏幕
菜单屏幕:
id:菜单屏幕
名称:“菜单”
经理:屏幕管理器
设置屏幕:
id:设置屏幕
名称:“设置\屏幕”
经理:屏幕管理器
:
名称:“菜单屏幕”
盒子布局:
标签:
文本:root.label1
标签:
文本:root.label2
按钮:
文本:“转到nn”
尺寸:0.2
新闻界:
root.manager.current='settings\u screen'
root.change_text()
:
#名称:“设置屏幕”
label\u id:label\u字段
盒子布局:
标签:
文本:root.label3
标签:
文本:root.label4
标签:
id:标签_字段
文本:“一些文本”

它运行时没有错误,但不会更改第二个屏幕的变量。为了调试,我在
UpdateSetting
函数中添加了
print(lbl1,lbl2)
,它打印出传递的lbl1和lbl2变量,但不更新标签

执行
chg=SettingsScreen()
时,您正在创建
SettingsScreen
类的新实例,并修改该实例的标签。您需要访问ScreenManager使用的对象,而不是创建新对象

您可以使用当前屏幕的
manager
属性获取另一屏幕的实例引用:

def change_text(self):          
    lbl1=self.label1 + " and "
    lbl2= "A beautiful "+ self.label2
    chg = self.manager.settings_screen   #<<<<<<<<<<<<<<
    chg.UpdateSettings(lbl1,lbl2)
def change_文本(自):
lbl1=self.label1+“和”
lbl2=“美丽的”+self.label2
chg=self.manager.settings\u屏幕#