In meinem App-Beispiel versuche ich den Labeltext mit der id: my_label im zweiten Screen wieder von "Neuer Text" auf 'This is the Second Screen' zurückzuändern.
Wenn man die App startet und dann auf den zweiten Bildschirm wechselt, kann man mit Button "Change label text" den Text des Labels id: my_label von
"This is the Second Screen" auf "Neuer Text!" ändern. Jetzt möchte ich den Text wieder zurück ändern, aber so, dass es im Hintergrund passiert (ohne dass der Benutzer die Änderung wenn auch
nur kurz sehen kann). Darum versuche ich das Label (im SecondScreen) im FirstScreen zurück zu ändern.
Leider funktioniert das aber nicht.
py-Datei
Code: Alles auswählen
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.properties import StringProperty
Builder.load_file("main.kv")
class FirstScreen(Screen):
label_text = StringProperty()
def __init__(self, **kwargs):
super(FirstScreen, self).__init__(**kwargs)
self.second_screen = SecondScreen()
self.label_text = self.second_screen.ids.my_label.text
def on_enter(self, *args):
self.label_text = "This is the Second Screen" # Das hier funktioniert nicht :)
@staticmethod
def go_to_second():
app = App.get_running_app()
app.root.current = "second_screen"
class SecondScreen(Screen):
def on_enter(self, *args):
pass
def change_label_text(self):
self.ids.my_label.text = "Neuer Text!"
def go_to_first(self):
app = App.get_running_app()
app.root.current = "first_screen"
# self.ids.my_label.text = "This is the Second Screen" # Das hier funktioniert, aber man kann das leider kurz sehen :)
class TestApp(App):
def build(self):
sm = ScreenManager()
first_screen = FirstScreen(name="first_screen")
sm.add_widget(first_screen)
second_screen = SecondScreen(name="second_screen")
sm.add_widget(second_screen)
return sm
if __name__ == "__main__":
TestApp().run()
Code: Alles auswählen
<FirstScreen>:
BoxLayout:
orientation: 'vertical'
Label:
text: 'This is the First Screen'
Button:
text: 'Go to Second Screen'
on_press: root.go_to_second()
<SecondScreen>:
BoxLayout:
orientation: 'vertical'
Label:
id: my_label
text: 'This is the Second Screen'
Button:
text: 'Change label text'
on_press: root.change_label_text()
Button:
text: 'Go to First Screen'
on_press: root.go_to_first()