Sprache auswählen

Das Framework baut auf dem Screen Manager auf, mit dem sich mehrere Screens verwalten lassen. Jeder Screen beinhaltet einen anderen Teil der Visualisierung. Im Detail lege ich die vier Screens Scrn1 bis Scrn4 an. 

Scrn1: Bildet das Hauptmenü

Scrn2: Zeigt die gemessene Temperatur und Feucht, in meinem Fall des Wohnzimmers an

Scrn3: Beinhaltet eine einfache Wetter App

Scrn4: Stellt die Verläufe der Temperatur und Feuchte der letzten 24h dar

Um das zu tun müssen wir zwei Dateien anlegen. Dabei ist die Benennung wichtig, ebenso wie die Groß- und Kleinschreibung.

Die erste Datei beinhaltet den Pyhton Code der Anwendung und heißt MyVisuApp.py.

Die zweite Datei beinhaltet die in kv language geschriebenen Layoutinformationen und heißt myvisu.kv.

Python

Wichtig ist erstmal nur, dass die Identifizierung der Screens über den Namen, in diesem Beispiel scrn1, scrn2, ... stattfindet. Diese Namen findet man später auch im .kv file.

# -*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen

class MyScreens(ScreenManager):
    '''
    The ScreenManager MyScreens takes care of changing between the available screens
    The functions goto_screen_1 .... can be called by all elements on the screens
    '''
    def __init__(self, **kwargs):
        '''__init__() can perform actions on instantioation. None so far'''
        super(MyScreens, self).__init__(**kwargs)

    def goto_scrn1(self):
        '''Switches to screen 1'''
        self.current='scrn1'

    def goto_scrn2(self):
        '''switches to screen 2'''
        self.current='scrn2'

    def goto_scrn3(self):
        '''switches to screen 3'''
        self.current='scrn3'

    def goto_scrn4(self):
        '''switches to screen 4'''
        self.current='scrn4'

        
class Scrn1(Screen):
    pass

class Scrn2(Screen):
    pass
                
class Scrn3(Screen):
    pass

class Scrn4(Screen):
        pass

class MyVisuApp(App):
    def build(self):
        return MyScreens()

if __name__ == '__main__':
    MyVisuApp().run()

 

KV

<MyScreens>:
    Scrn1:
    Scrn2:
    Scrn3:
    Scrn4:
        
<Scrn1>:
    name: 'scrn1'
    GridLayout:
        cols: 3
        size_hint: 1, .8
        pos_hint: {'top':.9, 'left':1}
        Button:
            id: bnt1
            text: 'Wohnzimmer'
            font_size: 35
            on_press:
                root.manager.transition.direction = 'left'
                root.manager.goto_scrn2()
        Button:
            id: btn2
            text: 'Vorhersage'
            font_size: 35
            on_press:
                root.manager.transition.direction = 'left'
                root.manager.goto_scrn3()
        Button:
            id: btn3
            text: 'Einstellungen'
            font_size: 35
            on_press: app.open_settings()
    Button:
        id: btn4
        text: 'Beenden'
        on_press: App.get_running_app().stop()
        size_hint: .1, .1
        pos_hint: {'top':1, 'left':1}
    Label:
        id: lbl1
        text: 'Hauptmenu'
        size_hint: .8, .1
        pos_hint: {'top':1, 'center_x':.5}
    Label:
        id: lbl2
        text: 'lbl2'
        size_hint: 1, .1
        pos_hint: {'bottom':1, 'center_x':.5}

#Screen 2 displays the temperature and humidity
<Scrn2>:
    name: 'scrn2'
    Button:
        id: back
        text: 'Hauptmenu'
        on_press:
            root.manager.transition.direction = 'right'
            root.manager.goto_scrn1()
        size_hint: .1, .1
        pos_hint: {'top':1, 'left':1}
    Button:
        id: btn1
        text: 'Diagramm'
        on_press:
            root.manager.transition.direction = 'right'
            root.manager.goto_scrn4()
        size_hint: .1, .1
        pos_hint: {'top':1, 'right':1}
    Label:
        id: lbl1
        text: 'Wohnzimmer'
        size_hint: .8, .1
        pos_hint: {'top':1, 'center_x':.5}
    Label:
        id: lbl2
        text: 'lbl2'
        size_hint: 1, .1
        pos_hint: {'bottom':1, 'center_x':.5}

#Screen 3 displays the weather forecast
<Scrn3>:
    name: 'scrn3'
    Button:
        id: back
        text: 'Hauptmenu'
        on_press:
            root.manager.transition.direction = 'right'
            root.manager.goto_scrn1()
        size_hint: .1, .1
        pos_hint: {'top':1, 'left':1}
    Label:
        id: lbl1
        text: 'Vorhersage'
        size_hint: .8, .1
        pos_hint: {'top':1, 'center_x':.5}
    Label:
        id: lbl2
        text: 'lbl2'
        size_hint: 1, .1
        pos_hint: {'bottom':1, 'center_x':.5}
    
#Screen 4 displays the temperature and humidity graph
<Scrn4>:
    name: 'scrn4'
    Button:
        id: btn1
        text: 'Wohnzimmer'
        on_press:
            root.manager.transition.direction = 'right'
            root.manager.goto_scrn2()
        size_hint: .1, .1
        pos_hint: {'top':1, 'left':1}
    Label:
        id: lbl1
        text: 'Diagramm'
        size_hint: .8, .1
        pos_hint: {'top':1, 'center_x':.5}
    Label:
        id: lbl2
        text: 'lbl2'
        size_hint: 1, .1
        pos_hint: {'bottom':1, 'center_x':.5}
    BoxLayout:
        id: lay1
        size_hint: 1, .8
        pos_hint: {'center_y':.5, 'left':1}

Das Ergebnis zeigt uns jetzt ein Hauptmenü mit drei Buttons, um zu den gewünschten Screens an. Die Screens selber sind noch leer, werden aber im Weitern mit Leben gefüllt.