2014-12-08 8 views
6

Mit dem Kivy Screen Manager erstelle ich zwei Bildschirme. Während ich in Bildschirm 1 bin, möchte ich ein Etikett in Bildschirm zwei ändern. Ich markieren Sie den problematischen Bereich in meinem Code:Kivy - Screen Manager - Zugreifen auf Attribute in anderen Klassen

mein 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 ist sehr zu schätzen! Danke, Nico

Antwort

11

Wie wäre es damit:

Wenn Sie die Taste auf MENU-Seite drücken, ist es ein Attribut auf sich selbst setzt mit dem Text, den Sie in der Einstellungenberühren Etikett setzen wollen. Dann wird dem MenuScreen in der kv-Datei ein ID-Wert zugewiesen, mit dem auf dieses Attribut verwiesen wird. Beispiel:

main.py

class MenuScreen(Screen): 
    text = StringProperty('') 
    def change_text(self): 
     self.text = "The text you want to set" 
     self.manager.current = "SettingsScreen" 

class SettingsScreen(Screen): 
    label_text = StringProperty('') 

kv Datei

ScreenManager: 
    id: screen_manager 
    MenuScreen: 
     id: menu_screen 
     name: 'MenuScreen' 
     manager: screen_manager 
    SettingsScreen: 
     name: 'SettingsScreen' 
     manager: screen_manager 
     label_text: menu_screen.text 

<MenuScreen>: 
    BoxLayout: 
     Button: 
      text: 'Goto nn' 
      on_press: 
       root.change_text() 

<SettingsScreen>: 
    BoxLayout: 
     Label: 
      text: root.label_text 

Wie Sie sehen können, habe ich die Namen und die ID der Bildschirme unter ScreenManager- selbst in der kv-Datei , denn das würde ich normalerweise tun, damit dies funktioniert.

+0

ja! Es klappt! Danke Mann, du bist ein Genie !!! :-) – BuroBernd

+0

Ich musste Eigenschaften importieren: 'from kivy.properties import StringProperty' – amd