globalforest/kivymd/app.py
2020-10-14 23:38:48 +03:00

90 lines
2.1 KiB
Python

"""
Themes/Material App
===================
This module contains :class:`MDApp` class that is inherited from
:class:`~kivy.app.App`. :class:`MDApp` has some properties needed for ``KivyMD``
library (like :attr:`~MDApp.theme_cls`).
You can turn on the monitor displaying the current ``FPS`` value in your application:
.. code-block:: python
KV = '''
Screen:
MDLabel:
text: "Hello, World!"
halign: "center"
'''
from kivy.lang import Builder
from kivymd.app import MDApp
class MainApp(MDApp):
def build(self):
return Builder.load_string(KV)
def on_start(self):
self.fps_monitor_start()
MainApp().run()
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/fps-monitor.png
:width: 350 px
:align: center
"""
__all__ = ("MDApp",)
from kivy.app import App
from kivy.properties import ObjectProperty
from kivymd.theming import ThemeManager
class FpsMonitoring:
"""Adds a monitor to display the current FPS in the toolbar."""
def fps_monitor_start(self):
from kivymd.utils.fpsmonitor import FpsMonitor
from kivy.core.window import Window
monitor = FpsMonitor()
monitor.start()
Window.add_widget(monitor)
class MDApp(App, FpsMonitoring):
theme_cls = ObjectProperty()
"""
Instance of :class:`~ThemeManager` class.
.. Warning:: The :attr:`~theme_cls` attribute is already available
in a class that is inherited from the :class:`~MDApp` class.
The following code will result in an error!
.. code-block:: python
class MainApp(MDApp):
theme_cls = ThemeManager()
theme_cls.primary_palette = "Teal"
.. Note:: Correctly do as shown below!
.. code-block:: python
class MainApp(MDApp):
def build(self):
self.theme_cls.primary_palette = "Teal"
:attr:`theme_cls` is an :class:`~kivy.properties.ObjectProperty`.
"""
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.theme_cls = ThemeManager()