user2067030
user2067030

Reputation: 764

Access data from Kivy Popoup Input

I was trying to look at different examples online to solve this issue but Still cannot figure out. I have an app that calls a popup class. The popup has an input field that does some manipulation to the text in the input field. The manipulated data is stored in a variable inside of the popup class. Now how can the parent widget access the data obtained from this widget. Here is a short example of the code.

KV

<ScreenManagement>:
ScreenManager:
    id: manager
    size_hint_y: 93

    Screen:
        name: "Case_info_screen"
        id: sc1

        FloatLayout:
            BoxLayout:

                orientation: 'vertical'


                BoxLayout:
                    size_hint_y: 10
                    canvas.before:
                        Color:
                            rgb: 0.17, 0.17, 0.17 # your color here
                        Rectangle:
                            pos: self.pos
                            size: self.size

                    Label:
                        text_size: self.size
                        font_size: 20
                        valign: 'middle'
                        height: "75dp"
                        size_hint_y: None
                        color: 1,1,1,1

                        size_hint_x: 75
                        text: "    Case Info"
                    RelativeLayout:
                        size_hint_x: 25

                        Button:
                            text_size: self.size
                            halign: 'center'
                            valign: 'middle'
                            size_hint: 0.70, 0.6
                            pos_hint: {'center_x': 0.5, 'center_y': 0.5}
                            text: 'Automatic Filler'
                            on_press: root.formfiller()

                BoxLayout:

                    size_hint_y: 5
                    spacing: 35
                    LabelCases:
                        text: '  Name: '
                        width: '125dp'
                        size_hint_x:  None


                    TextInput:
                        id: first_name_input
                        width: '300dp'
                        height: '40dp'
                        size_hint_x: None
                        font_size: 18


                        hint_text: 'First Name'

                    TextInput:
                        id: last_name_input
                        width: '300dp'
                        height: '40dp'
                        size_hint_x: None
                        font_size: 18
                        hint_text: 'Last Name'

<Formfillerpop>:
    title: 'Automatic Filler'
    size_hint: None, None
    size: 600, 600
    BoxLayout:
        orientation: 'vertical'
        Label:
            size_hint_y: 20
            text: 'Please Paste your text'
            markup: True
        TextInput:
            id: sentence
            size_hint_y: 65
        BoxLayout:
            size_hint_y: 10
            orientation: 'horizontal'
            Button:
                text: 'Analyze'
                on_press: root.on_analyze(sentence.text)
            Button:
                text: 'Close'
                on_press: root.closepop()

Python:

class Formfillerpop(Popup):
    selection = StringProperty
    id = ObjectProperty
    def on_analyze(self, selection):
        analyze = TextExtractor(selection)

        names = analyze.name()




    def closepop(self):
        self.dismiss()


class ScreenManagement(FloatLayout):
    def formfiller(self, *args):
        Formfillerpop().open()




class IOApp(App):
    def build(self):
        return ScreenManagement()


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

Ultimately I want to take the txt from names in the popup and then autopopulate the first name and last name in the main app with the analyzed data Sorry if this is basic. I am fairly new to Kivy.

Upvotes: 1

Views: 884

Answers (1)

Nykakin
Nykakin

Reputation: 8747

You can access popup content using its content property. You can use it to read text property of read underlying TextInput. For example this code binds this property to local popup_text StringProperty, which means that any change in the popup text input will be reflected there:

from kivy.uix.popup import Popup
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.app import App
from kivy.lang import Builder
from kivy.properties import StringProperty

Builder.load_string('''
<CustomPopup>:
    size_hint: .5, .5
    auto_dismiss: False
    title: 'Hello world'
    BoxLayout:
        text_input: text_input
        orientation: 'vertical'
        TextInput:
            id: text_input
        Button:
            text: 'dismiss'    
            on_press: root.dismiss()
''')

class CustomPopup(Popup):
    pass

class TestApp(App):
    popup_text = StringProperty()

    def build(self):
        l = BoxLayout()
        l.add_widget(Button(
            text='show_popup', on_press=self.show_popup
        ))
        l.add_widget(Button(
            text='print popup text', on_press=self.print_popup_text
        ))
        return l    

    def show_popup(self, *args):
        p = CustomPopup()
        p.content.text_input.bind(text=self.setter('popup_text'))
        p.open()

    def print_popup_text(self, *args):
        print(self.popup_text)

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

Upvotes: 2

Related Questions