2014-12-08 8 views
6

में विशेषता एक्सेस करना किवी स्क्रीन मैनेजर का उपयोग करके, मैं दो स्क्रीन बना देता हूं। स्क्रीन 1 में होने पर, मैं स्क्रीन दो में एक लेबल बदलना चाहता हूं। मैं अपने कोड में समस्याग्रस्त क्षेत्र पर प्रकाश डाला:किवी - स्क्रीन मैनेजर - अन्य कक्षा

मेरी 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" 

और मेरे 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() 

किसी भी मदद की बहुत सराहना कर रहा है! धन्यवाद, निको

उत्तर

11

कैसे इस बारे में:

जब आप MenuScreen पर बटन दबाते हैं, यह अपने आप पर एक विशेषता पाठ आप SettingsScreen लेबल में डाल करना चाहते हैं निर्धारित करता है। फिर मेनूस्क्रीन को केवी फ़ाइल में एक आईडी मान असाइन किया जाता है, जिसका उपयोग इस विशेषता को संदर्भित करने के लिए किया जाता है। उदाहरण:

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

केवी फ़ाइल

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 

आप देख सकते हैं, मैं केवी फ़ाइल में नाम और स्क्रीन की आईडी ScreenManager खुद के तहत सेट , जैसा कि मैं आमतौर पर यह काम करने के लिए करता हूं।

+0

हाँ! यह काम करता हैं! धन्यवाद आदमी, आप एक प्रतिभाशाली हैं !!! :-) – BuroBernd

+0

मुझे गुण आयात करने की आवश्यकता है: 'kivy.properties से आयात स्ट्रिंगप्रोपर्टी' – amd

संबंधित मुद्दे