Outils pour utilisateurs

Outils du site


kivy_options_settings

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
kivy_options_settings [2020/01/14 09:37] sergekivy_options_settings [2020/01/18 11:20] serge
Ligne 9: Ligne 9:
  
 =====Un exemple===== =====Un exemple=====
 +**Tiré de [[https://github.com/sergeLabo/apprendre-kivy/blob/master/apprendre_kivy/serverkivy.py|serverkivy.py ]]**
 +<code python settings_wiki.py>
 +#! /usr/bin/env python3
 +# -*- coding: utf-8 -*-
  
-<code python .py+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()
 </code> </code>
  
 {{tag>kivy python3 sb}} {{tag>kivy python3 sb}}
kivy_options_settings.txt · Dernière modification : 2020/10/19 07:13 de serge