2014-12-08 12 views
6

Tworzę dwa ekrany za pomocą Kivy Screen Manager. Będąc na ekranie 1, chcę zmienić etykietę na ekranie drugim. I podświetlić obszar problematyczny w moim kodu:Kivy - Menedżer ekranów - atrybut dostępu w innej klasie

mój 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" 

i mój 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() 

Każda pomoc jest mile widziana! Dzięki, Nico

Odpowiedz

11

Jak o tym:

Po naciśnięciu przycisku na MenuScreen, ustawia atrybut na siebie zawierający tekst, który chcesz umieścić na etykiecie SettingsScreen. Następnie MenuScreen zostaje przypisana wartość id w pliku kv, który służy do odniesienia do tego atrybutu. Przykład:

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('') 

plik kV

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 

Jak widać, ustawić nazwy i id ekranach pod sobą ScreenManager w pliku kv , jak to zwykle robię, aby to zadziałało.

+0

tak! to działa! Dzięki, jesteś geniuszem !!! :-) – BuroBernd

+0

Musiałem zaimportować właściwości: 'from kivy.properties import StringProperty' – amd

Powiązane problemy