2015-03-01 4 views
2

Я использую ввод от First Screen, сохраните этот ввод в глобальной переменной CHOSEN_INPUT, затем, когда я перехожу на Second Screen, эта глобальная переменная отображается там.kivy: Глобальная переменная и ScreenManager

У меня есть начало, но не знаю, куда идти ... Может быть, с ObjectProperty, но я не знаю, как передать его из одного класса в другой.

global_test.py

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.label import Label 
from kivy.uix.button import Button 
from kivy.uix.screenmanager import Screen, ScreenManager, NoTransition 
from kivy.properties import ObjectProperty 


#global variable 
CHOSEN_INPUT = '' 


class FirstScreen(Screen): 
    obj_input = ObjectProperty() 
    obj_label = ObjectProperty() 
    obj_okay = ObjectProperty() 

    def buttonClicked(self): 
     global CHOSEN_INPUT 
     print('RESULT :', self.obj_input.text) 
     self.obj_label.text = "You wrote : " + self.obj_input.text 
     CHOSEN_INPUT = self.obj_input.text 



class SecondScreen(Screen): 
    pass 


class FromFirstScreen(BoxLayout): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     global CHOSEN_INPUT 

     self.orientation = 'vertical' 
     lbl = Label(Text=CHOSEN_INPUT) 
     self.add_widget(lbl) 


class Global_VariableApp(App): 
    def build(self): 
     sm = ScreenManager(transition=NoTransition()) 
     sm.add_widget(FirstScreen(name='firstcreen')) 
     sm.add_widget(SecondScreen(name='secondscreen')) 
     return sm 


if __name__ == "__main__": 
    Global_VariableApp().run() 

и:

global_variable.kv

<FirstScreen>: 
    obj_input: input_box 
    obj_label: label_box 
    obj_okay: okay_btn 
    BoxLayout: 
     orientation: 'vertical' 
     TextInput: 
      id: input_box 
      size_hint_y: None 
      height: "40dp" 
      multiline: False 
     Label: 
      id: label_box 
     Button: 
      id: okay_btn 
      text: "Okay" 
      on_press: root.buttonClicked() 
     Button: 
      text: "Go To Second Screen" 
      on_press: root.manager.current = 'secondscreen' 

<SecondScreen>: 
    BoxLayout: 
     orientation: 'vertical' 
     Button: 
      text: "Input from First Screen :" 
     FromFirstScreen: 
     Button: 
      text: "Go To First Screen" 
      on_press: root.manager.current = 'firstcreen' 

ответ

2

Найдено благодаря @ mcastle, решение которого: Changing Kivy widget attribute from another widget

Я поместил внутри класса SecondScreen функция update_text:

class SecondScreen(Screen): 

    obj_input1_box = ObjectProperty() 

    def update_text(self, label_text): 
     #print('label_text :', label_text) 
     self.obj_input1_box.text = label_text 

и в файле кв, я вставил функцию: root.manager.get_screen('secondscreen').update_text(root.obj_label.text) (и положить id на этикетке текст SecondScreen который обновляется):

<FirstScreen>: 
    ... 
     Button: 
      id: okay_btn 
      text: "Okay" 
      on_press: root.buttonClicked(); root.manager.get_screen('secondscreen').update_text(root.obj_label.text) ... 

<SecondScreen>: 
    obj_input1_box: input1_box 
    ... 
     Label: 
      id: input1_box 
    ... 
Смежные вопросы