AttributeError:“kivy.properties.DictProperty”对象没有属性“字段”?

Posted

技术标签:

【中文标题】AttributeError:“kivy.properties.DictProperty”对象没有属性“字段”?【英文标题】:AttributeError: 'kivy.properties.DictProperty' object has no attribute 'field'? 【发布时间】:2021-05-28 02:44:50 【问题描述】:

我收到此错误:“AttributeError: 'kivy.properties.DictProperty' 对象没有属性 'field'”

我正在尝试使用 kivymd 创建一个下拉菜单。 在我的 .kv 文件中,我有这个“id: field”,它一直对我说“对象没有属性‘field’”

欢迎任何帮助!

这是我的 .kv 文件:

<Box>:
    MDTextField:
        id: field
        pos_hint: 'center_x': .5, 'center_y': .5
        size_hint_x: None
        width: "200dp"
        hint_text: "Password"
        on_focus: if self.focus: app.menu.open()

这是我的 .py 文件:

from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from kivymd.app import MDApp
from kivymd.uix.menu import MDDropdownMenu


class Box(BoxLayout):
    pass


class Projeto(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.screen = Box
        menu_items = ["icon": "git", "text": f"Item i" for i in range(5)]
        self.menu = MDDropdownMenu(
            caller=self.screen.ids.field,
            items=menu_items,
            position="bottom",
            width_mult=4,
        )
        self.menu.bind(on_release=self.set_item)

    def set_item(self, instance_menu, instance_menu_item):
        def set_item(interval):
            self.screen.ids.field.text = instance_menu_item.text
            instance_menu.dismiss()

        Clock.schedule_once(set_item, 0.5)

    def build(self):
        return Box()


if __name__ == '__main__':
    Projeto().run()

【问题讨论】:

尝试将self.screen = Box 更改为self.screen = Box()。只需添加() @JohnAnderson 刚刚做到了。它说“ AttributeError:'super'对象没有属性'getattr'” @manus 那么这是一个需要修复的单独错误。 【参考方案1】:

您可以通过消除您的 __init__() 方法并将部分代码移至 build() 方法来修复该错误:

class Projeto(MDApp):

    def set_item(self, instance_menu_item):
        def set_item(interval):
            self.screen.ids.field.text = instance_menu_item.text
            self.menu.dismiss()

        Clock.schedule_once(set_item, 0.5)

    def build(self):
        self.screen = Box()
        menu_items = ["icon": "git", "text": f"Item i" for i in range(5)]
        self.menu = MDDropdownMenu(
            caller=self.screen.ids.field,
            callback=self.set_item,
            items=menu_items,
            position="bottom",
            width_mult=4,
        )
        # self.menu.bind(on_release=self.set_item)  # use callback instead of bind
        return self.screen

【讨论】:

以上是关于AttributeError:“kivy.properties.DictProperty”对象没有属性“字段”?的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:“字节”对象没有属性“告诉”

AttributeError: 'RDD' 对象没有属性 'show'

AttributeError:“NumpyArrayIterator”对象没有属性“类”

AttributeError:模块 'dbus' 没有属性 'lowlevel'

AttributeError:模块'keras'没有属性'initializers'

AttributeError:“会话”对象没有属性“会话”