如何修复AttributeError:“NoneType”对象没有“theme”属性

2024-04-23 10:49:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试Kivymd,但一直收到错误:AttributeError:“NoneType”对象没有属性“theme\cls”。在

我在App类中添加了主题\u 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()

Tags: lambdafromimportrightnoneappscreencolor
1条回答
网友
1楼 · 发布于 2024-04-23 10:49:26

根本原因

当Kivy处理kv文件/字符串时,它在实例化theme_cls之前实例化了根规则,MyScreenManager:。当MyScreenManager:被实例化时,它实例化它的子节点Screen:。当Screen:被实例化时,它实例化它的子节点Toolbar:,它引用theme_cls。但是theme_cls尚未实例化。因此,它抛出了以下错误

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

AttributeError: 'NoneType' object has no attribute 'theme_cls'

解决方案

kv串

  • 将根规则MyScreenManager:替换为类规则<MyScreenManager>:

片段

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


<MyScreenManager>:
    Screen:

Python脚本

  • return Login替换为return MyScreenManager()

片段

^{pr2}$

输出

Result

相关问题 更多 >