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

Код python файла:

from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.screenmanager import ScreenManager, Screen
import psycopg2
from kivy.core.window import Window
from kivymd.uix.button import MDFlatButton
from kivymd.uix.dialog import MDDialog
from kivymd.uix.menu import MDDropdownMenu
from kivymd.uix.tab import MDTabsBase
from kivymd.uix.floatlayout import MDFloatLayout
from kivymd.font_definitions import fonts
from kivymd.icon_definitions import md_icons
from kivy.metrics import dp

Window.maximize()

conn = psycopg2.connect(dbname='TestApp', user='postgres',
                        password='354610213', host='localhost')
cursor = conn.cursor()


class Tab(MDFloatLayout, MDTabsBase):
    pass
class MainScreen(Screen):
    pass
class LoginScreen(Screen):
    dialog = None

    def show_access_dialog(self):
        if not self.dialog:
            self.dialog = MDDialog(
                text='Доступ запрещён',
                buttons=[MDFlatButton(text='Закрыть', on_release=self.close_dialog)]
            )
        self.dialog.open()

    def close_dialog(self, obj):
        self.dialog.dismiss()


class WindowManager(ScreenManager):
    pass


class MainApp(MDApp):
    conn = psycopg2.connect(dbname='TestApp', user='postgres',
                            password='354610213', host='localhost')
    _cursor = conn.cursor()

    _cursor.execute(
        """SELECT * FROM "Users";"""
    )
    _data = _cursor.fetchall()

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.screen = Builder.load_file("style.kv")

        cursor.execute(
            """SELECT "Title" FROM "Services";"""
        )

        self.data = cursor.fetchall()
        data1 = []

        for i in self.data:
            data1.append(i[0])

        self.menu_items = [
            {
                'icon': 'format-list-checkbox',
                'text': f"{i}",
                "height": dp(56),
                'on_release': lambda x=f"{i}": self.set_serv(x),
            } for i in data1
        ]
        self.menu = MDDropdownMenu(
            caller=self.screen.main.ids.services,
            items=self.menu_items,
            position="auto",
            width_mult=4,
        )
        self.menu.bind(on_release=self.set_serv)

    def set_serv(self, text_item):
        self.screen.main.ids.sevices.text = text_item
        self.menu.dismiss()

    def on_start(self):
        item_tabs = {
            'Добавление Клиента': 'account-multiple-plus',
            'Таблица Клиентов': 'table-account',
            'Статистика': 'google-analytics',
            'Настройки': 'cog'
        }

        for item, icon in item_tabs.items():
            self.root.main.ids.tabs.add_widget(
                Tab(text=f"[ref={item}][font={fonts[-1]['fn_regular']}]{md_icons[icon]}[/font][/ref] {item}")
            )

    def on_tab_switch(
            self, instance_tabs, instance_tab, instance_tab_label, tab_text
    ):
        pass

    def build(self):
        self.theme_cls.theme_style = "Dark"
        self.theme_cls.primary_palette = "BlueGray"
        return self.screen


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

Код kv файла:

#: import md_icons kivymd.icon_definitions.md_icons
#: import fonts kivymd.font_definitions.fonts

WindowManager:
    id: wm
    main: main
    LoginScreen:
        name: 'login'
    MainScreen:
        name: 'main'
        id: main

<LoginScreen>:

    login: username
    password: password

    Screen:
        MDCard:
            size_hint: None, None
            size: 300, 400
            pos_hint: {"center_x": 0.5 , "center_y": 0.5}
            elevation: 10
            padding: 25
            spacing: 25
            orientation: 'vertical'

            MDLabel:
                id: login_label
                text: 'Вход'
                font_size: 40
                halign: 'center'
                size_hint_y: None
                height: self.texture_size[1]
                padding_y: 15

            MDTextFieldRound:
                id: username
                hint_text: 'Имя пользователя'
                icon_right: 'account'
                size_hint_x: None
                width: 200
                font_size: 16
                pos_hint: {"center_x": 0.5}

            MDTextFieldRound:
                id: password
                hint_text: 'Пароль'
                icon_right: 'eye-off'
                size_hint_x: None
                width: 200
                font_size: 16
                pos_hint: {"center_x": 0.5}
                password: True

            MDRoundFlatButton:
                text: 'Войти'
                font_size: 12
                pos_hint:{"center_x": 0.5}
                on_release:
                    if  app._data[0][0] == root.login.text and app._data[0][1] == root.password.text: app.root.current = 'main'
                    else: root.show_access_dialog()

            Widget:
                size_hint_y: None
                height: 45


<MainScreen>:

    Screen:

        MDNavigationLayout:

            ScreenManager:

                Screen:

                    MDBoxLayout:

                        orientation: 'vertical'

                        MDTabs:
                            id: tabs
                            on_tab_switch: app.on_tab_switch(*args)
                            size_hint_y: None
                            height: '48dp'
                            tab_indicator_anim: False
                            background_color: 0.1, 0.1, 0.1, 1

                        Tab:
                            id: add_client
                            name: 'add_client'
                            text: f"[ref={'Добавление Клиента'}][font={fonts[-1]['fn_regular']}]{md_icons['account-multiple-plus']}[/font][/ref] {'Добавление Клиента'}"

                            BoxLayout:
                                orientation: 'vertical'
                                padding: '10dp'

                                BoxLayout:
                                    orientation: 'horizontal'

                                    MDIconButton:
                                        icon: 'account'

                                    MDTextField:
                                        hint_text: 'Инициалы'

                                BoxLayout:
                                    orientation: 'horizontal'

                                    MDIconButton:
                                        icon: 'adjust'

                                    MDTextField:
                                        hint_text: 'Статус'

                                BoxLayout:
                                    orientation: 'horizontal'

                                    MDIconButton:
                                        icon: 'format-list-checkbox'

                                    MDTextField:
                                        id: services
                                        hint_text: 'Услуга'
                                        on_focus: if self.focus : app.menu.open()

                                BoxLayout:
                                    orientation: 'horizontal'

                                    MDIconButton:
                                        icon: 'tram'

                                    MDTextField:
                                        hint_text: 'Адрес'
                        Tab:
                            id: table_client
                            name: 'table_client'
                            text: f"[ref={'Таблица Клиентов'}][font={fonts[-1]['fn_regular']}]{md_icons['table-account']}[/font][/ref] {'Таблица Клиентов'}"

                        Tab:
                            id: analytics
                            name: 'analytics'
                            text: f"[ref={'Статистика'}][font={fonts[-1]['fn_regular']}]{md_icons['google-analytics']}[/font][/ref] {'Статистика'}"

                        Tab:
                            id: settings
                            name: 'settings'
                            text: f"[ref={'Настройки'}][font={fonts[-1]['fn_regular']}]{md_icons['cog']}[/font][/ref] {'Настройки'}"

Подскажите как решить проблему, при запуске выдаёт проблему:


Ответы (0 шт):