<jupyter_start><jupyter_text>Grundlagen Eine `Kivy`-App besteht im Wesentlichen aus drei Elementen:- Unterklassifizierung der Klasse `App`- `build()`-Methode implementieren, sodass eine Widget-Instanz zurückgegeben wird- Instanziierung dieser Klasse und Aufruf der `run()`-Methode  Python-Module herunterladen  Installation: Windows<jupyter_code>! pip install --upgrade pip wheel setuptools
! pip install docutils pygments pypiwin32 kivy-deps.sdl2 kivy-deps.glew 
! pip install kivy-deps.gstreamer 
! pip install kivy-deps.angle 
! pip install –-upgrade kivy<jupyter_output><empty_output><jupyter_text>Installation: OS X<jupyter_code>! python -m pip install kivy<jupyter_output><empty_output><jupyter_text>BeispielMinimale `Kivy`-Anwendung<jupyter_code>import kivy
from kivy.app import App
from kivy.uix.label import Label


class MyApp(App):
    
    def build(self):
        return Label(text='Hello world!')
    

if __name__ == '__main__':
    MyApp().run()<jupyter_output>[INFO   ] [Logger      ] Record log in /Users/tinvotan/.kivy/logs/kivy_20-10-18_4.txt
[INFO   ] [Kivy        ] v1.11.1
[INFO   ] [Kivy        ] Installed at "/Users/tinvotan/.virtualenvs/kivy_test-nyXpAqGo/lib/python3.7/site-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.7.6 (default, Jul 14 2020, 09:52:49) 
[Clang 11.0.3 (clang-1103.0.32.62)]
[INFO   ] [Python      ] Interpreter at "/Users/tinvotan/.virtualenvs/kivy_test-nyXpAqGo/bin/python"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_imageio, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
[INFO   ] [Text        ] Provider: sdl2
[INFO   ] [Window      ] Provider: sdl2
[INFO   ] [GL          ] Using the "OpenGL ES 2" graphics system
[INFO   ] [GL          ] Backend used <sdl2>
[INFO   ] [GL          ] OpenGL version <b'2.1 INTEL-14.7.8'>
[INFO   ] [GL          ] OpenGL vendor <b'Intel Inc.'>
[INFO   ] [GL          ] OpenGL renderer <b'Intel(R) Iris(TM) Plus Graphics[...]<jupyter_text>---  Erläuterungen  Import / Laden der Module<jupyter_code>from kivy.app import App<jupyter_output><empty_output><jupyter_text>Die Basisklasse der App muss von der Klasse `App` aus `Kivy` erben.<jupyter_code>from kivy.uix.label import Label<jupyter_output><empty_output><jupyter_text>**Pakete und Klassen** sind in `Kivy` in Unterordnern angelegt. So befindeen sich beispielsweise die Elemente der Benutzerschnittstelle (auch User Interaction and Experience aka. UIX) wie __Layouts und Widgets__ im Modul `uix`.  Klassen definieren / Widgets hinzufügen<jupyter_code>class MyApp(App):<jupyter_output><empty_output><jupyter_text>Hier wird die Basisklasse der Kivy-App definiert. > Die Basisklasse muss von der Klasse `App` aus dem Modul `kivy.app` erben. Folglich ist `App` die ***Oberklasse*** und `MyApp` die ***Unterklasse***.<jupyter_code>def build(self):
        return Label(text='Hello world!')<jupyter_output><empty_output><jupyter_text>Mithilfe der `build()`-Funktion wird das `Root Widget` initiiert und wiedergegeben. In diesem Beispiel wird auf die Klasse `Label` aus dem `kivy.uix.label` zurückgegriffen und ein Objekt erzeugt. Der Klasse `Label` wird der Parameter `text='Hello world!'` übergeben und mit `return` das Objekt aus der Methode `build()`.<jupyter_code>if __name__ == '__main__':
    MyApp().run()<jupyter_output><empty_output><jupyter_text>Der Code `if __name__ == '__main__':` ist als Kontrollstruktur (eng. ***Execution Control***, siehe [www.realpython.com](https://realpython.com/python-main-function/use-if-__name__-__main__-to-control-the-execution-of-your-code)) bekannt. Eine Python-Datei hat in der Regel zwei Zwecke, entweder:- es handelt sich um ein eigenständiges Programm, was ablaufen soll (z.B. wenn in der Konsole `python first_kivy_app.py` getätigt wird) oder- es handelt sich um eine Ansammlung von Funktionen, Klassen oder Konstanten auf die zurückgegriffen werden soll (z.B. wenn mithilfe von `from kivy.app import App` die vordefinierte Klasse `App` importiert werden soll).Durch die Verwendung von `if __name__ == '__main__':` müssen nicht zwei Dateien angelegt werden, sondern können durch eine einzige Python-Datei bedient werden.Der Aufruf von `MyApp()` erzeugt das Objekt aus der Unterklasse `MyApp`, welche von der Oberklasse `App` alle Methoden, Klassenvariablen usw. erbt. Mithilfe der Methode `run()`, die eine Methode der Oberklasse `App` darstellt wird die `Kivy`-App gestartet.  Ausführen der `Kivy`-App<jupyter_code>! python first_kivy_app.py<jupyter_output><empty_output><jupyter_text>Die `Kivy`-App kann mittels des Befehls im Terminal ausgeführt werden. ---  Weitere `Kivy`-Module<jupyter_code>! python -m pip install kivy-garden
! python -m pip install ffpyplayer
! python -m pip install kivymd<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1097637466025507, 'fraction_numerical': 0.012126280577043697, 'mean_word_length': 4.784764207980653, 'pattern_counts': {'":': 0, '<': 44, '<?xml version=': 0, '>': 44, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 1, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '10', 'dir': 'jupyter-structured-clean-dedup', 'id': '231906', 'license': 'MIT', 'n_tokens_mistral': 1783, 'n_tokens_neox': 1780, 'n_words': 462, 'path': 'Lektion_4/Kivy_Basics.ipynb', 'repo_name': 'tvotan/dhbw_python_kivy', 'size': '4783'}