弹出确认后,从一个屏幕到另一个屏幕的kivy传递值

时间:2019-02-12 13:01:33

标签: python kivy

我有两个屏幕,一个有输入,另一个显示输出。当输入输入并按下执行按钮时,必须出现一个弹出窗口并显示``您要转移值吗?''。如果按No(否),则转到第二个屏幕并显示上一个值。如果按是,则转到第二个屏幕,并在kivy屏幕中显示新值。需要帮助。

py

from kivy.properties import StringProperty,ObjectProperty
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen

from kivy.uix.popup import Popup

class Screen1(Screen):
    text = StringProperty('')

    def changetext(self):
        self.text = self.text11.text
    def erroropen(self):
        Error_Change().open()

class Error_Change(Popup):
    def changetext(self):
        Screen1().changetext()

class Screen2(Screen):
    label_text = StringProperty('')


class screenApp(App):
    pass

screenApp().run()

kv

ScreenManager:
    id: screen_manager
    Screen1:
        id: screen_1
        name: 'screen1'
    Screen2:
        name: 'screen2'
        label_text: screen_1.text

<Screen1>:
    text11:text11
    BoxLayout:
        orientation:'vertical'
        TextInput:
            id:text11
        Button:
            text: 'Screen 2'
            on_press:
                root.manager.current='screen2'
        Button:
            text: 'Set Value and go to screen 2'
            on_press:
                root.erroropen()
<Error_Change>:
    id:pop3
    title:'Alert!!!'
    size_hint: .65,.4
    auto_dismiss: False
    BoxLayout
        orientation: 'vertical'
        spacing:0
        padding:[0,0,0,10]
        size:self.size
        Label:
            text:'Do you want to start cycling with this configuration?'
            font_size:20
            bold:True
        BoxLayout:
            orientation: 'horizontal'
            font_size:15
            padding:[30,10,30,10]
            size_hint:1,.6
            spacing:20

            Button:
                text:'Continue'
                on_release:
                    root.changetext()
                    app.root.current='screen2'
                    pop3.dismiss()
                bold:True
                background_normal: ''
                background_color: (.75, .2, .01,1)
            Button:
                text:'Cancel'
                on_release: pop3.dismiss()
                bold:True
                background_normal: ''
                background_color: (.1, .8, 0,1)
<Screen2>:
    BoxLayout:
        Label:
            text: root.label_text
        Button:
            text: 'Screen 1'
            on_press:
                root.manager.current='screen1'

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但这是一个很常见的错误。基本上,这归因于对python中的类和实例之间的区别的误解,或者至少是关于kivy小部件的区别。

change_text中,您将创建一个新的Screen1实例,而不是在您的应用程序中使用现有的实例。这不会有任何效果,因为此新实例未添加到您的应用程序中(也不应该添加到您的应用程序中),并且一旦python知道它没有用于任何东西,它将被销毁。

您想要的是获取对现有Screen1实例的引用,一种获取方法是首先获取对您的App实例的引用,并使用其ids的{​​{1}}属性属性(指向窗口小部件树的底部)。

您可以使用root获取“ app”对象(与kv中的App.get_running_app()相同),并使用带有正确参数的app。或者,您可以跳过此步骤,直接从kvlang调用app.root.ids.screen_1.change_text()