Files
kawai-focus/kawai_focus/main.py
T

82 lines
2.4 KiB
Python

import kivy
kivy.require('2.3.1')
from kivy.lang import Builder
from kivy.animation import Animation
from kivy.metrics import dp
from kivy.uix.behaviors import ButtonBehavior
from kivy.logger import Logger
from kivy.properties import StringProperty
import logging
from kivymd.app import MDApp
from kivymd.uix.screenmanager import MDScreenManager
from kivymd.uix.expansionpanel import MDExpansionPanel
from kivymd.uix.behaviors import RotateBehavior
from kivymd.uix.list import MDListItemTrailingIcon
from kivymd.uix.navigationrail import MDNavigationRailItem
from kawai_focus.menu_app import MenuApp
from kawai_focus.screens.timers_screen import TimersScreen
Logger.setLevel(logging.DEBUG)
class TrailingPressedIconButton(
ButtonBehavior, RotateBehavior, MDListItemTrailingIcon
):
"""Кнопка-иконка в конце элемента списка с поддержкой анимации"""
...
class CommonNavigationRailItem(MDNavigationRailItem):
"""Класс панель навигации"""
text = StringProperty()
icon = StringProperty()
class KawaiFocusApp(MDApp, MenuApp):
"""Главный класс приложения"""
def build(self) -> MDScreenManager:
"""Создаёт и возвращает менеджер экранов приложения"""
self.theme_cls.theme_style = 'Dark'
# Загрузка kv файла
Builder.load_file('kv/timers_screen.kv')
self.screen_manager = MDScreenManager()
self.screen_manager.add_widget(TimersScreen(name='timers_screen'))
return self.screen_manager
def tap_expansion_chevron(
self, panel: MDExpansionPanel, chevron: TrailingPressedIconButton
) -> None:
"""Анимация и переключение состояния раскрытия панели"""
Animation(
padding=(
[0, dp(12), 0, dp(12)] if not panel.is_open else [0, 0, 0, 0]
),
d=0.2,
).start(panel)
panel.open() if not panel.is_open else panel.close()
(
panel.set_chevron_down(chevron)
if not panel.is_open
else panel.set_chevron_up(chevron)
)
def main() -> None:
"""Главная функция для запуска приложения KawaiFocus"""
try:
KawaiFocusApp().run()
except KeyboardInterrupt:
pass