Kivy - Screen-Manager - Zugriff auf Attribut in einer anderen Klasse
Mithilfe der Kivy-Screen-Manager, erstelle ich zwei Bildschirme. Während es in Bildschirm 1, ich möchte das ändern einer Beschriftung im Bildschirm zwei. Ich markieren Sie den problematischen Bereich in meinem code:
meine test.ky:
#: import ScreenManager kivy.uix.screenmanager.ScreenManager
#: import Screen kivy.uix.screenmanager.ScreenManager
#: import SettingsScreen screen
ScreenManager:
MenuScreen:
SettingsScreen:
<MenuScreen>:
name: 'MenuScreen'
BoxLayout:
Button:
text: 'Goto nn'
on_press:
root.manager.current = 'SettingsScreen'
root.change_text()
<SettingsScreen>:
name: 'SettingsScreen'
label_id: label_field
BoxLayout:
Label:
id: label_field
text: "to_be_changed"
und meine screen.py
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
class MenuScreen(Screen):
def change_text(self):
pass
# HERE: something like
# root.SettingsScreen.label_field.text = 'new text'
class SettingsScreen(Screen):
pass
class TestApp(App):
pass
TestApp().run()
Jede Hilfe wird sehr geschätzt!
Danke, Nico
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie wäre es damit:
Wenn Sie die Taste drücken auf der MenuScreen, er setzt ein Attribut auf sich selbst mit dem text, den Sie wollen, um in der SettingsScreen Label. Dann den MenuScreen wird eine id zugewiesen Wert in der kv-Datei, die verwendet wird, um die Referenz in diesem Attribut. Beispiel:
main.py
kv Datei
Wie Sie sehen können, habe ich den Namen und die id der Bildschirme unter ScreenManager selbst in die kv-Datei, wie das ist, was ich normalerweise tun, um diese Arbeit zu machen.
from kivy.properties import StringProperty