kivy передать значение с одного экрана на другой экран после всплывающего подтверждения - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть два экрана, один из которых имеет ввод, а другой показывает вывод. Когда ввод введен и нажата кнопка «Перейти», должно появиться всплывающее окно с сообщением «Вы хотите передать значение?».Если нет, перейдите на второй экран и покажите предыдущее значение.если да, нажмите на второй экран и покажите новое значение на экране 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()

кв

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 голосов
/ 13 февраля 2019

Не знаю почему, но это очень распространенная ошибка, которую вы совершаете.Это в основном сводится к неправильному пониманию различий между классами и экземплярами в Python или, по крайней мере, к которым, когда речь идет о kivy виджетах.

в change_text, вы создаете новый экземпляр Screen1 вместоиспользуя существующий в вашем приложении.Это не будет иметь никакого эффекта, так как этот новый экземпляр не добавляется в ваше приложение (и не должен быть), и будет уничтожен, как только Python поймет, что он не используется ни для чего.

Что вы хотите, чтобы получить ссылку на ваш существующий экземпляр Screen1, один из способов получить это сначала получить ссылку на ваш экземпляр приложения и использовать атрибут ids его атрибута root (который указывает на основу вашего виджета).дерево).

Вы можете использовать App.get_running_app(), чтобы получить объект "app" (аналогично app в кв), и использовать app.root.ids.screen_1.change_text() с правильным параметром.Или вы можете просто пропустить этот шаг и напрямую вызвать app.root.ids.screen_1.change_text() из kvlang.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...