Kivy:如何在另一个屏幕中更改属性的值,例如当前屏幕的标签文本
Kivy: How to change the attribute's value like text of label from current screen in another screen
我试图从当前屏幕更改另一个屏幕的文本。但是没用
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
它说我的 Label 的文本已被更改,但是当它进入下一个屏幕时它并没有被更改。
Display_Screen
有人知道问题出在哪里吗?请帮助我
每当您使用像 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()
我试图从当前屏幕更改另一个屏幕的文本。但是没用
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
它说我的 Label 的文本已被更改,但是当它进入下一个屏幕时它并没有被更改。
Display_Screen
有人知道问题出在哪里吗?请帮助我
每当您使用像 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()