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] {'Настройки'}"
Подскажите как решить проблему,
при запуске выдаёт проблему:
