首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不获取ValueError,如何访问类的根属性

如果不获取ValueError,如何访问类的根属性
EN

Stack Overflow用户
提问于 2021-07-20 04:03:29
回答 1查看 36关注 0票数 0

我是一名kivy/kivymd新手,正在学习如何按照kivymd网站( https://kivymd.readthedocs.io/en/0.104.0/components/navigation-drawer/)制作导航抽屉。我把我的代码放在最下面。

每当我运行代码时,它都会给出这个错误:

代码语言:javascript
复制
 kivy.lang.builder.BuilderException: Parser: File "<inline>", line 10:
 ...
       8:        icon: root.icon 
       9:        theme_text_color: "Custom"
 >>   10:        text_color: root.text_color
      11:        
      12:<ContentNavigationDrawer>:
 ...
 ValueError: None is not allowed for IconLeftWidget.text_color

我知道根是指尖括号中的父类,在本例中是ItemDrawer。所以我认为它应该做ItemDrawer.text_color。我对kivy和kivymd一无所知,我需要帮助来弄清楚如何解决这个问题!

这是我的代码。首先是包含我的字符串的python文件,Builder加载该文件:

代码语言:javascript
复制
proof_helper = """
<ItemDrawer>:
    theme_text_color: "Custom" 
    on_release: self.parent.set_color_item(self) 
    #invokes DrawerList set_color_item method

    IconLeftWidget:
        id: icon
        icon: root.icon 
        theme_text_color: "Custom"
        text_color: root.text_color
        
<ContentNavigationDrawer>:
    orientation: 'vertical'
    padding: '8dp'
    spacing: '8dp'
    
    ScrollView:
        DrawerList:
            id: md_list

Screen:
    MDNavigationLayout:
        ScreenManager:
            Screen:
                BoxLayout:
                    orientation: 'vertical'
                    MDToolbar:
                        title: "Navigation Drawer"
                        elevation: 8
                        left_action_items : [["menu", lambda x: nav_drawer.set_state()]]
                    
                    Widget:
                    
            Screen:
            
        MDNavigationDrawer:
            id: nav_drawer
            ContentNavigationDrawer:
                id: content_drawer
"""

这是我的main.py文件:

代码语言:javascript
复制
from kivymd.app import MDApp
from kivymd.theming import ThemableBehavior
from kivy.lang import Builder
from kivymd.uix.list import MDList, OneLineListItem, OneLineIconListItem
from kivy.core.window import Window
from proof_nav import proof_helper
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty, StringProperty

Window.size = (300, 500)


class ItemDrawer(OneLineIconListItem):
    icon = StringProperty()


class ContentNavigationDrawer(BoxLayout):
    pass


class DrawerList(ThemableBehavior, MDList):
    def set_color_item(self, instance_item):
        for item in self.children:
            if item.text_color == self.theme_cls.primary_color:
                item.text_color = self.theme_cls.text_color
                break
        instance_item.text_color = self.theme_cls.primary_color


class ProofApp(MDApp):
    def build(self):
        screen = Builder.load_string(proof_helper)
        return screen

    def on_start(self):
        icons_item = {
            "folder": "My files",
            "account-multiple": "Shared with me",
            "star": "Starred",
            "history": "Recent",
            "checkbox-marked": "Shared with me",
            "upload": "Upload",
        }

        for item in icons_item:
            self.root.ids.content_drawer.ids.md_list.add_widget(
                ItemDrawer(icon=item, text=icons_item[item])
            )


ProofApp().run()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-20 06:00:47

OneLineIconListItem的默认text_colorNone。如果您希望我们这样做,您必须将它的值设置为None以外的值。

你也可以这样做:

代码语言:javascript
复制
text_color: root.text_color if root.text_color else (0,0,0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68446365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档