簡體   English   中英

如何修復AttributeError:'NoneType'對象沒有屬性'theme_cls'

[英]How to fix AttributeError: 'NoneType' object has no attribute 'theme_cls'

我正在嘗試Kivymd,但始終收到錯誤:AttributeError:'NoneType'對象沒有屬性'theme_cls'。

我在App類中添加了theme_cls = ThemeManager(),但仍然出現錯誤。 由於沒有更多的在線解決方案,請提供幫助。

from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition, WipeTransition

from kivy.app import App
from kivy.uix.button import Button
from kivymd.navigationdrawer import MDNavigationDrawer
from kivymd.theming import ThemeManager

class BeginScreen(Screen):
    pass

class MyScreenManager(ScreenManager):
    pass

Login = Builder.load_string('''
#: import Toolbar kivymd.toolbar.Toolbar


MyScreenManager:
    Screen:


<Screen>:

    Toolbar:
        title: "Simple toolbar"
        pos_hint: {'center_x': 0.5, 'center_y': 0.75}
        md_bg_color: get_color_from_hex(colors['Teal']['500'])
        background_palette: 'Teal'
        background_hue: '500'
    Toolbar:
        title: "Toolbar with right buttons"
        pos_hint: {'center_x': 0.5, 'center_y': 0.5}
        md_bg_color: get_color_from_hex(colors['Amber']['700'])
        background_palette: 'Amber'
        background_hue: '700'
        right_action_items: [['content-copy', lambda x: None]]
    Toolbar:
        title: "Toolbar with left and right buttons"
        pos_hint: {'center_x': 0.5, 'center_y': 0.25}
        md_bg_color: get_color_from_hex(colors['DeepPurple']['A400'])
        background_palette: 'DeepPurple'
        background_hue: 'A400'
        left_action_items: [['arrow-left', lambda x: None]]
        right_action_items: [['lock', lambda x: None], \
            ['camera', lambda x: None], \
            ['play', lambda x: None]]


''')

class MyApp(App):
    theme_cls = ThemeManager()

    def build(self):
        return Login

if __name__ == "__main__":
    MyApp().run()

根本原因

當Kivy處理kv文件/字符串時,它會在theme_cls實例化之前實例化根規則 MyScreenManager: theme_cls 實例化MyScreenManager: ,將實例化其子Screen: 實例化Screen: ,實例化其子對象Toolbar:引用theme_cls 但是theme_cls尚未實例化。 因此,它引發了以下錯誤,

  self._shadow = App.get_running_app().theme_cls.quad_shadow 

AttributeError:“ NoneType”對象沒有屬性“ theme_cls”

kv字符串

  • 將根規則MyScreenManager:替換為類規則<MyScreenManager>:

片段

Login = Builder.load_string('''
#:import Toolbar kivymd.toolbar.Toolbar


<MyScreenManager>:
    Screen:

Python腳本

  • return MyScreenManager()替換return Login

片段

class MyApp(App):
    theme_cls = ThemeManager()

    def build(self):
        return MyScreenManager()

產量

結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM