在kivy中使用python将变量从一个屏幕更改为另一个屏幕
我有一个两屏的kivy应用程序,我想使用python将一个变量从一个屏幕传递到另一个屏幕 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
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屏幕#