【问题标题】:Kivy 'NoneType' object has no attribute 'ids'Kivy 'NoneType' 对象没有属性 'ids'
【发布时间】:2016-02-29 16:46:18
【问题描述】:

我在我的 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

感谢您的帮助:)

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    您可以将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
    

    您收到错误的原因是因为在构造函数中,ids 尚未根据kv 文件中指定的规则填充。

    如果您确实想使用普通属性,可以安排 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
    

    这将为下一帧安排对 init_eq_text_box 的调用,届时将填充 ids。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-18
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多