global-variables - kivy:全局变量和ScreenManager

标签 global-variables screen kivy

我使用来自第一个屏幕的输入,将此输入存储到全局变量CHOSEN_INPUT中,然后当我转到第二个屏幕时code>,这个全局变量就显示在那里。

我已经开始,但不知道该去哪里......也许使用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()

和:

全局变量.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'

最佳答案

感谢@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

在 kv 文件中,我插入了一个函数:root.manager.get_screen('secondscreen').update_text(root.obj_label.text) (并为更新的 SecondScreen 文本标签添加 id):

<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
    ...

关于global-variables - kivy:全局变量和ScreenManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28791895/

相关文章:

javascript - 将全局变量抽象为属性?

c - fork() 情况下的全局变量值

python - Python中的全局变量在文件之间共享变量

javascript - 如何在javascript中获取从窗口顶部到特定div/标签的高度

ios - 我的 iOS 应用程序在启动屏幕后出现黑屏,但显示状态栏。 iOS SDK 5.1

javascript - Javascript 中的 GLOBAL 变量是什么?

python - Kivy:使用 ListAdapter 或 DictAdapter 更新 ListView 数据不会更改按钮文本

python - 在 Kivy 应用程序中获取文本输入值

python - Kivy错误: [CRITICAL] [App ] Unable to get a Window,中止

android - 仅在首次启动时显示设置屏幕