Kivy:如何在另一个屏幕中更改属性的值,例如当前屏幕上的标签文本



我试图从当前屏幕更改另一个屏幕的文本。但它不起作用

from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.properties import ObjectProperty
from kivy.lang.builder import Builder

Builder.load_string("""
<Input_Screen>:
input: input
BoxLayout:
orientation : "vertical"
TextInput:
id: input
text: "Changed"
Button:
text: "Enter"
on_press : root.clicked()

<Display_Screen>:
nice: nice
BoxLayout:
orientation : "vertical"
Label:
id: nice
text: "NotChanged"

""")

class Input_Screen(Screen):
input = ObjectProperty(None)
def clicked(self):
Display_Screen().change()
class Display_Screen(Screen):
nice = ObjectProperty(None)
def change(self):
print(self.nice.text) #Checking the Current text of The Label
print(Input_Screen().input.text) #Checking What do we want to change
self.nice.text = Input_Screen().input.text
print(self.nice.text) #Checking if it has change or not
MyApp().sm.current = "Ds" #Changing Screen to Display_Screen
print(self.nice.text) #Checking if it has change or not

class MyApp(App):
sm = ScreenManager()
def build(self):
self.sm.add_widget(Input_Screen(name="Is"))
self.sm.add_widget(Display_Screen(name="Ds"))
return self.sm
MyApp().run()

我在控制台中得到的:

NotChanged #Checked the Current text of The Label
Changed #Checked What do we want to change
Changed #Checked if it has change or not
Changed #Checked if it has change or not

它说我的标签的文本已经更改,但当它转到下一个屏幕时,它没有更改。

显示屏幕

有人知道问题出在哪里吗?请帮帮我

无论何时使用类似ClassName()的构造,都是在创建ClassName的新实例。您在change()方法和clicked()方法中执行此操作。无论何时执行此操作,都会引用该新实例,而不是GUI中的实例。

要解决这个问题,请更改:

def clicked(self):
Display_Screen().change()

至:

def clicked(self):
self.manager.get_screen('Ds').change()

在您的change()方法中,替换:

Input_Screen()

带有:

self.manager.get_screen('Is')

并替换";

MyApp()

带有:

App.get_running_app()

最新更新