更改屏幕时如何更新屏幕值

时间:2017-12-12 19:56:42

标签: python kivy

我在python中有一个脚本,有一个带有不同屏幕的kivy文件。在屏幕1中,我在TextInput中引入了一些信息,当我切换到下面的屏幕(屏幕2)时,我想恢复我在屏幕1的TextInput中引入的变量的值。我有问题更新屏幕2的功能__init__中的值。

我不知道哪种方法是自动更新值的最佳方式。

class PantallaDos(Screen):

    def __init__(self, *args):
        super(PantallaDos, self).__init__(**kwargs)
        softinput_mode = 'below_target'
        Window.softinput_mode = softinput_mode

        self.ids['pol'].text = 'verdadero'

Kivy kv.file

<PantallaDos>:

    BoxLayout:
        orientation: 'vertical'
        padding: 10
        spacing: 3
        canvas:
            Color:
                rgb: 0.15,0.14,0.14
            Rectangle:
                pos: self.pos
                size: self.size

....

        SLabel:
            id: pol
            size_hint: None, None
            size: root.width, 30

1 个答案:

答案 0 :(得分:0)

您可以将共享数据保存在ScreenManager类或App类中。例如 或者直接在kv中访问它 下面是一个示例,您只需使用text输入的id(以kv为单位)在另一个屏幕中设置标签文本。

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder


Builder.load_string("""

<Manager>:
    Screen:
        name: 'first'
        BoxLayout:
            TextInput:
                id: ti
                text: 'type something'
            Button:
                text:'go to other'
                on_press: app.sm.current = 'other'

    Screen:
        name: 'other'
        BoxLayout:
            Label:
                text: ti.text
            Button:
                text:'go to first'
                on_press: app.sm.current = 'first'

""")


class Manager(ScreenManager):
    pass


class ClassApp(App):

    def build(self):
        self.sm = Manager()
        return self.sm


if __name__ == '__main__':
    ClassApp().run()