python – Kivy’NonType’对象没有属性’ids’
发布时间:2020-12-20 13:10:23 所属栏目:Python 来源:网络整理
导读:我在我的Kivy应用程序中收到以下错误,但我不知道为什么以及如何解决它: File "main.py",line 16,in __init__self.seq_text_box = self.parent.ids.seq_text_boxAttributeError: 'NoneType' object has no attribute 'ids' 基本上,我要做的就是访问MenuBar类
我在我的Kivy应用程序中收到以下错误,但我不知道为什么以及如何解决它:
File "main.py",line 16,in __init__ self.seq_text_box = self.parent.ids.seq_text_box AttributeError: 'NoneType' object has no attribute 'ids' 基本上,我要做的就是访问MenuBar类的方法中的文本框.我是新手,所以我很可能误解了一些东西. .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() .kv文件 MinuRoot: <MinuRoot>: orientation: "vertical" MenuBar SequenceTextBox id: seq_text_box <MenuBar>: height: "40dp" size_hint_y: None Button: text: "Go!" on_press: root.go() <SequenceTextBox>: focus: True 我感谢您的帮助 :) 解决方法
您可以将seq_text_box存储为
ObjectProperty 的MenuBar并将其设置为kv文件:
class MenuBar(BoxLayout): seq_text_box = ObjectProperty() def go(self): print(self.seq_text_box.text) 并在kv文件中: <MinuRoot>: orientation: "vertical" MenuBar: seq_text_box: seq_text_box SequenceTextBox: id: seq_text_box 您收到错误的原因是因为在构造函数中没有从kv文件中指定的规则填充id. 如果您确实想使用普通属性,可以安排Clock事件: class MenuBar(BoxLayout): def __init__(self,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 这将在将填充ids时为下一帧安排对init_eq_text_box的调用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |