in __init__ word = self.search_box.text AttributeError: el objeto ‘NoneType’ no tiene ningún atributo ‘text’

Estoy haciendo una aplicación. En la medida en que sé que estoy haciendo algo correctamente, pero sigo recibiendo este error.

word = self.search_box.text AttributeError: el objeto ‘NoneType’ no tiene ningún atributo ‘text’

He comprobado los errores tipográficos y otros errores comunes todavía no está funcionando.

Heres el código-

import kivy kivy.require('1.10.0') from kivy.uix.stacklayout import StackLayout from kivy.uix.floatlayout import FloatLayout from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label from kivy.app import App from kivy.uix.popup import Popup from kivy.uix.screenmanager import ScreenManager, Screen from kivy.lang import Builder from kivy.properties import ObjectProperty from kivy.uix.textinput import TextInput from kivy.properties import StringProperty import json Builder.load_file('VocabularyJournal.kv') class MenuPage(Screen): pass class DisplayPage(Screen): search_box= ObjectProperty() label_maening=StringProperty() label_synonym=StringProperty() label_ant=StringProperty() label_sentence=StringProperty() def __init__(self, **kwargs): super(DisplayPage,self).__init__(**kwargs) with open('vocab_words.json') as rfile: data=json.load(rfile) word=self.search_box.text #the error occurred here for value in data: if value['word']==word: self.label_maening=value['meaning'] self.label_synonym=value['synonym'] self.label_ant=value['antonyms'] self.label_sentence=value['sentence'] class WordInsertPage(Screen): pass class NewWordPage(Screen): word_box = ObjectProperty() meaning_box = ObjectProperty() synonym_box = ObjectProperty() ant_box = ObjectProperty() sentence_box = ObjectProperty() def saving_data(self): with open('vocab_words.json') as rfile: data=json.load(rfile) entry={'word': self.word_box.text, 'meaning': self.meaning_box.text, 'synonym': self.synonym_box.text, 'antonyms': self.ant_box.text, 'sentence': self.sentence_box.text} data.append(entry) with open('vocab_words.json','w') as wfile: json.dump(data,wfile,indent=4) class FlashCard(Screen): pass class WordGroups(Screen): pass class Manager(ScreenManager): pass class VocabularyJournalApp(App): def build(self): return Manager() object = VocabularyJournalApp() object.run() 

Heres el código KV-

 : MenuPage: name: 'menu' WordInsertPage: name: 'insertword' NewWordPage: name: 'newword' FlashCard: name: 'flashcard' WordGroups: name: 'wordgroup' DisplayPage: name: 'display' : Label: text: "Vocabulary Journal" size_hint: .90,.10 StackLayout: orientation: 'tb-rl' spacing: 10 padding: 10 Button: text: 'Search' size_hint: None,.20 width: 130 background_down:'darkgrey.png' on_press: root.manager.current='insertword' Button: text: 'New Word' size_hint: None,.20 width: 130 background_down:'darkgrey.png' on_press: root.manager.current='insertword' Button: text: 'Flash Cards' size_hint: None,.20 width: 130 background_down:'darkgrey.png' on_press: root.manager.current='flashcard' Button: text: 'Word Groups' size_hint: None,.20 width: 130 background_down:'darkgrey.png' on_press: root.manager.current='wordgroup' : FloatLayout: Button: text: "New Word" on_press: root.manager.current='newword' font_size: 30 color: 0,0,0,1 size_hint: .2, .1 pos_hint: {"center_x": .5, "center_y": 0.3} background_down: 'darkgrey.png' Button: text: "search word" on_press: root.manager.current='display' font_size: 30 color: 0,0,0,1 size_hint: .2, .1 pos_hint: {"center_x": .5, "center_y": 0.5} background_down: 'darkgrey.png' Button: text: 'Flash Cards' on_press: root.manager.current="flashcard" font_size: 30 color: 0,0,0,1 size_hint: .2, .1 pos_hint: {"center_x": .5, "center_y": 0.7} background_down: 'darkgrey.png' : id: refer_to_it word_box: word_input meaning_box: meaning_input synonym_box: Synonym_input ant_box: ant_input sentence_box: sentence_input StackLayout: orientation: 'tb-rl' spacing: 10 padding: 90 TextInput: text: "write your word here" color: 1,1,1,1 id: word_input width: 300 size_hint: None, .10 TextInput: text: "write meaning of your word here" color: 1,1,1,1 id: meaning_input width: 600 size_hint: None, .20 TextInput: text: "write Synonyms of your word here" color: 1,1,1,1 id: Synonym_input width: 600 size_hint: None, .20 TextInput: text: "write antonyms of your text here" color: 1,1,1,1 id: ant_input width: 600 size_hint: None, .20 TextInput: text: "write a sentence based on your word here" color: 1,1,1,1 id: sentence_input width: 600 size_hint: None, .20 Button: text: 'Save' size_hint: None,.10 width: 130 background_down:'darkgrey.png' on_press: refer_to_it.saving_data() : search_box: search_text # search_box is the reference to the textinput in py file BoxLayout: size_hint_y: None height: '48dp' TextInput: text:'enter the word you wanna search here' id: search_text ToggleButton: id: tog text: 'Horizontal' group: 'accordion' state: 'down' ToggleButton: text: 'Vertical' group: 'accordion' Accordion: orientation: 'horizontal' if tog.state == 'down' else 'vertical' AccordionItem: title:'meaning' Label: text: root.label_maening text_size: self.width, None AccordionItem: title:'Synonym' Label: text: root.label_synonym text_size: self.width, None AccordionItem: title:'Antonym' Label: text: root.label_ant text_size: self.width, None AccordionItem: title:'Sentence' Label: text: root.label_sentence text_size: self.width, None 

el problema se debe a que los hijos no están bloqueados en el constructor del padre, lo hace un instante más tarde, por lo que search_box no será ninguno en el constructor, la solución es ejecutarlo un instante después de terminar el constructor con la ayuda de Clock:

 from kivy.clock import Clock class DisplayPage(Screen): search_box= ObjectProperty() label_maening=StringProperty() label_synonym=StringProperty() label_ant=StringProperty() label_sentence=StringProperty() def __init__(self, **kwargs): super(DisplayPage,self).__init__(**kwargs) Clock.schedule_once(self.callback) def callback(self, dt): with open('vocab_words.json') as rfile: data=json.load(rfile) word=self.search_box.text #the error occurred here for value in data: if value['word']==word: self.label_maening=value['meaning'] self.label_synonym=value['synonym'] self.label_ant=value['antonyms'] self.label_sentence=value['sentence']