feat: added functional for new disign for timers_screen

This commit is contained in:
Arduinum628
2025-10-02 11:35:42 +03:00
parent c196e02314
commit 0a6814372d
5 changed files with 267 additions and 80 deletions

View File

@@ -1,42 +1,67 @@
import kivy
kivy.require('2.3.1')
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager
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
import logging
from kawai_focus.screens.timer_screen import TimerScreen
from kawai_focus.screens.timer_constructor_screen import TimerConstructorScreen
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 kawai_focus.menu_app import MenuApp
from kawai_focus.screens.timers_screen import TimersScreen
from kawai_focus.database.cruds import list_timers
Logger.setLevel(logging.DEBUG)
class KawaiFocusApp(App):
"""Класс для создания приложения"""
class TrailingPressedIconButton(
ButtonBehavior, RotateBehavior, MDListItemTrailingIcon
):
"""Кнопка-иконка в конце элемента списка с поддержкой анимации"""
...
title = 'Kawai.Focus'
def build(self):
class KawaiFocusApp(MDApp, MenuApp):
"""Главный класс приложения"""
def build(self) -> MDScreenManager:
"""Создаёт и возвращает менеджер экранов приложения"""
self.theme_cls.theme_style = 'Dark'
# Загрузка kv файла
Builder.load_file('kv/timer_screen.kv')
Builder.load_file('kv/timer_constructor_screen.kv')
Builder.load_file('kv/timers_screen.kv')
screen_manager = ScreenManager()
timers = list_timers()
timers_screen = TimersScreen(name='timers_screen')
timers_screen.ids.timers_view.data = timers
self.screen_manager = MDScreenManager()
self.timers_screen = TimersScreen(name='timers_screen')
self.screen_manager.add_widget(self.timers_screen)
return self.screen_manager
def tap_expansion_chevron(
self, panel: MDExpansionPanel, chevron: TrailingPressedIconButton
) -> None:
"""Анимация и переключение состояния раскрытия панели"""
screen_manager.add_widget(timers_screen)
screen_manager.add_widget(TimerConstructorScreen(name='timer_constructor_screen'))
screen_manager.add_widget(TimerScreen(name='timer_screen'))
return screen_manager
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: