Outils pour utilisateurs

Outils du site


kivy_options_settings

Kivy: Options Settings

Ressources

Un exemple et des commentaires pertinents comme explications

Tiré de serverkivy.py

settings_wiki.py
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
 
import kivy
kivy.require('1.11.1')
 
from kivy.app import App
from kivy.uix.button import Button
 
# Pour l'honneur des mangalores
GLOBAL_DICT = {}
 
class MyApp(App):
    def build(self):
        """Excécuté après build_config !"""
 
        settings_button = Button(text='Options')
        settings_button.bind(on_press=self.open_settings)
        return settings_button
 
    def on_start(self):
        """Exécuté apres build()"""
        pass
 
    def build_config(self, config):
        """Excécuté en premier, avant build.
        Si le fichier *.ini n'existe pas,
                il est créé avec ces valeurs par défaut.
        Il s'appelle comme le kv mais en ini
        Si il manque seulement des lignes, il ne fait rien !
        """
 
        print("Création du fichier *.ini si il n'existe pas")
 
        config.setdefaults('network',
                            { 'multi_ip': '228.0.0.5',
                              'multi_port': 18888,
                              'tcp_port': 8000,
                              'cast': 'multi',
                              'freq': 60,
                              'tcp_ip': '192.168.0.105'})
 
        config.setdefaults('kivy',
                            { 'log_level': 'debug',
                              'log_name': 'apprendre-kivy_%y-%m-%d_%_.txt',
                              'log_dir': '/sdcard',
                              'log_enable': '1'})
 
        config.setdefaults('postproc',
                            { 'double_tap_time': 250,
                              'double_tap_distance': 20})
 
        print("self.config peut maintenant être appelé")
 
    def build_settings(self, settings):
        """Construit l'interface de l'écran Options, pour apprendre_kivy seul,
        les réglages Kivy sont par défaut.
 
        Cette méthode est appelée par app.open_settings() dans .kv,
        donc si Options est cliqué !
        Les types contrôlent les saisies, mais pas les desc ne contrôlent pas.
        """
 
        print("Construction de l'écran Options")
 
        data = """[
                    {"type": "title", "title":"Configuration du réseau"},
 
                    {"type": "string",
                      "title": "Multicast IP",
                      "desc": "IP = 228.0.0.5",
                      "section": "network", "key": "multi_ip"},
 
                    {"type": "numeric",
                      "title": "Multicast Port",
                      "desc": "Port = 18888",
                      "section": "network", "key": "multi_port"},
 
                    {"type": "numeric",
                      "title": "TCP Port",
                      "desc": "Port = 8000",
                      "section": "network", "key": "tcp_port"},
 
                    {"type": "string",
                      "title": "Cast",
                      "desc": "multi ou tcp",
                      "section": "network", "key": "cast"},
 
                    {"type": "numeric",
                      "title": "Fréquence",
                      "desc": "Fréquence entre 1 et 60 Hz",
                      "section": "network", "key": "freq"},
 
                    {"type": "string",
                      "title": "TCP IP",
                      "desc": "IP = 192.168.0.105",
                      "section": "network", "key": "tcp_ip"}
                   ]"""
 
        # self.config est le config de build_config
        settings.add_json_panel('ServerKivy', self.config, data=data)
 
    def on_config_change(self, config, section, key, value):
        """Si modification des options, fonction appelée automatiquement
        menu = self.screen_manager.get_screen("Main")
        """
 
        if config is self.config:  # du joli python rigoureux
            token = (section, key)
 
            # Frequency
            if token == ('network', 'freq'):
                GLOBAL_DICT["freq"] = int(token[1])
 
            # Cast
            if token == ('network', 'cast'):
                print("Nouveau réseau:", value)
                # TODO ... etc ...
 
    def do_quit(self):
        print("Je quitte proprement")
 
        # Kivy
        ServerKivyApp.get_running_app().stop()
 
        # Extinction forcée de tout, si besoin
        os._exit(0)
 
MyApp().run()
kivy_options_settings.txt · Dernière modification: 2020/10/19 09:13 de serge