El objeto ‘NoneType’ de Kivy no tiene atributos ‘id’

Recibo el siguiente error en mi aplicación Kivy, pero no estoy seguro de por qué y cómo solucionarlo:

File "main.py", line 16, in __init__ self.seq_text_box = self.parent.ids.seq_text_box AttributeError: 'NoneType' object has no attribute 'ids' 

Básicamente, todo lo que estoy tratando de hacer es acceder al cuadro de texto dentro de los métodos de la clase MenuBar . Soy nuevo en esto, así que es probable que esté malinterpretando algo.

archivo .py

 from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.textinput import TextInput class SequenceTextBox(TextInput): pass #... class MenuBar(BoxLayout): def __init__(self, **kwargs): super(MenuBar, self).__init__(**kwargs) self.seq_text_box = self.parent.ids.seq_text_box def go(self): print(self.seq_text_box.text) class MinuRoot(BoxLayout): pass class MinuApp(App): pass if __name__ == '__main__': MinuApp().run() 

archivo .kv

 MinuRoot: : orientation: "vertical" MenuBar SequenceTextBox id: seq_text_box : height: "40dp" size_hint_y: None Button: text: "Go!" on_press: root.go() : focus: True 

Aprecio tu ayuda 🙂

Puede almacenar seq_text_box como ObjectProperty de MenuBar y configurarlo en el archivo kv :

 class MenuBar(BoxLayout): seq_text_box = ObjectProperty() def go(self): print(self.seq_text_box.text) 

y en el archivo kv :

 : orientation: "vertical" MenuBar: seq_text_box: seq_text_box SequenceTextBox: id: seq_text_box 

La razón por la que recibe el error es porque en el constructor los ids no se han completado a partir de las reglas especificadas en el archivo kv .

Si desea usar un atributo simple, puede progtwigr un evento de Clock :

 class MenuBar(BoxLayout): def __init__(self, **kwargs): super(MenuBar, self).__init__(**kwargs) Clock.schedule_once(self.init_seq_text_box, 0) def init_seq_text_box(self, *args): self.seq_text_box = self.parent.ids.seq_text_box 

Esto progtwigrá una llamada a init_eq_text_box para el siguiente fotogtwig, cuando se rellenarán los init_eq_text_box .