加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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的调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读