2016-10-01 3 views
0

Я пытался посмотреть на различные примеры онлайн, чтобы решить эту проблему, но все еще не могу понять. У меня есть приложение, которое вызывает всплывающий класс. Всплывающее окно имеет поле ввода, которое выполняет некоторые манипуляции с текстом в поле ввода. Управляемые данные хранятся в переменной внутри всплывающего класса. Теперь, как родительский виджет может получить доступ к данным, полученным от этого виджета. Вот краткий пример кода.Доступ к данным от Kivy Popoup Вход

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() 

В конце концов, я хочу взять TXT из имен в всплывающем окне, а затем заполняется автоматически имя и фамилии в главном приложении с анализируемыми данными Извините, если это просто. Я довольно новичок в Kivy.

ответ

0

Вы можете получить доступ к всплывающему контенту, используя его свойство content. Вы можете использовать его для чтения text свойство читать ниже TextInput. Например, этот код привязывает это свойство к локальному popup_text StringProperty, что означает, что любое изменение ввода всплывающего текста будет отражено там:

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() 
Смежные вопросы