Outils pour utilisateurs

Outils du site


kivy_comment_faire_un_tas_de_chose

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
kivy_comment_faire_un_tas_de_chose [2020/02/17 12:03] – [Des explications avec les exemples des sources] sergekivy_comment_faire_un_tas_de_chose [2022/11/19 09:49] (Version actuelle) – [Sur internet] serge
Ligne 1: Ligne 1:
-======Kivy: Comment faire un tas de chose ======+======Kivy: Comment faire ou ne pas faire un tas de chose ======
 <WRAP center round box 60% centeralign> <WRAP center round box 60% centeralign>
 **{{tagpage>kivy|Toutes les pages Kivy}}**   **{{tagpage>kivy|Toutes les pages Kivy}}**  
Ligne 10: Ligne 10:
 ====Sur internet==== ====Sur internet====
   * Dans la **[[https://kivy.org/doc/stable/|doc officielle]]**, mais les chances de trouver sont quasi nulles.   * Dans la **[[https://kivy.org/doc/stable/|doc officielle]]**, mais les chances de trouver sont quasi nulles.
-  * Dans un moteur de recherche: ça finit souvent par des posts sur stackoverflow, avec des réponses <del>médiocres</del> fausses, uniquement motivées par le gain de points ! +  * Dans un moteur de recherche: ça finit souvent par des posts sur stackoverflow, avec des réponses <del>médiocres</del> fausses. 
 +  * **[[https://www.geeksforgeeks.org/kivy-tutorial/|geeksforgeeks.org]] est récent et plutôt bien.**
 ====Une bonne solution: Les exemples des sources de kivy==== ====Une bonne solution: Les exemples des sources de kivy====
   * Télécharger les sources sur [[https://github.com/kivy/kivy|github]]   * Télécharger les sources sur [[https://github.com/kivy/kivy|github]]
Ligne 17: Ligne 17:
   * Rechercher dans les fichiers: si vous chercher "source:", vous aurez la liste de tous les fichiers qui utilisent "source:". Si c'est un kv, trouver le .py corespondant pour l'exécuter.   * Rechercher dans les fichiers: si vous chercher "source:", vous aurez la liste de tous les fichiers qui utilisent "source:". Si c'est un kv, trouver le .py corespondant pour l'exécuter.
  
 +====Gallery of Examples====
 +**[[https://kivy.org/doc/stable/examples/index.html|Gallery of Examples]]** Il faut fouiller!
 =====Des explications avec les exemples des sources===== =====Des explications avec les exemples des sources=====
 Une liste de scripts qui explique bien: Une liste de scripts qui explique bien:
Ligne 35: Ligne 37:
   * **video player** : [[https://github.com/kivy/kivy/blob/master/examples/widgets/videoplayer.py|videoplayer.py]]   * **video player** : [[https://github.com/kivy/kivy/blob/master/examples/widgets/videoplayer.py|videoplayer.py]]
   * **ErrorPopup(Popup)** : [[https://github.com/kivy/plyer/blob/master/examples/text2speech/main.py|main.py]] et [[https://github.com/kivy/plyer/blob/master/examples/text2speech/text2speechdemo.kv|text2speechdemo.kv]]   * **ErrorPopup(Popup)** : [[https://github.com/kivy/plyer/blob/master/examples/text2speech/main.py|main.py]] et [[https://github.com/kivy/plyer/blob/master/examples/text2speech/text2speechdemo.kv|text2speechdemo.kv]]
 +  * **Slider** : [[https://github.com/kivy/kivy/blob/master/examples/canvas/circle.py|circle.py]]
 +  * **Clock** : [[https://github.com/kivy/kivy/blob/master/examples/tutorials/pong/main.py|Pong]] ou [[https://github.com/kivy/kivy/blob/master/examples/canvas/mesh_manipulation.py|mesh_manipulation.py]]
 +
 +
 +
  
 =====Adapter la résolution dpi sur son PC===== =====Adapter la résolution dpi sur son PC=====
   * Sur votre PC, définir la taille de votre fenêtre   * Sur votre PC, définir la taille de votre fenêtre
 <code python> <code python>
-from kivy.core.window import Window +from plyer import utils 
-Les 3 lignes ci-dessous sont à commenter pour buildozer + 
-# L'écran de mon tél fait 1280*720 +from oscpy.client import OSCClient 
-k = 1.+from oscpy.server import OSCThreadServer 
-WS = (int(1280*k), int(720*k)) + 
-Window.size = WS+print("Platform =", utils.platform) 
 +ANDROID = utils.platform._platform_android  # retourne True ou False 
 +print("Android =", ANDROID) 
 +if not ANDROID: 
 +    from kivy.core.window import Window 
 +    Simulation de l'écran de mon tél1280*720 
 +    k = 0.8 
 +    WS = (int(720*k), int(1280*k)) 
 +    Window.size = WS 
 +    os.environ['JAVA_HOME'] = '/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64' 
 + 
 +from jnius import autoclass
 </code> </code>
  
Ligne 76: Ligne 94:
 ...... ......
 </code> </code>
-=====Comment passer d'une class à une autre=====+=====Comment passer un attribut d'une class à une autre=====
 En fait, **comment passer d'un objet à un autre !** En fait, **comment passer d'un objet à un autre !**
  
Ligne 83: Ligne 101:
 puis dans la liste des méthodes et attributs, ayez de nez. Si app est dans la liste: puis dans la liste des méthodes et attributs, ayez de nez. Si app est dans la liste:
   print(dir(self.app))   print(dir(self.app))
-  +  
 +====Comment récupérer self.app dans tous les objets==== 
 +Une solution élégante est utilisée dans **[[https://github.com/sergeLabo/accelerometer/blob/main/main.py|accelerometer: main.py]]** avec ces extraits modifiés pour expliquer: 
 +<code python> 
 +class AccelerometerApp(App): 
 +    def build(self): 
 +        return Accelerometer(self) 
 +         
 +class Accelerometer(BoxLayout): 
 +    def __init__(self, app, **kwargs): 
 +        super().__init__(**kwargs) 
 +        self.app = app 
 +        self.app.osc = OSC() 
 +         
 +class OSC: 
 +    def __init__(self): 
 +        self.histo = [] 
 +        self.server = OSCThreadServer() 
 +        self.server.bind(b'/histo', self.on_histo) 
 +         
 +    def on_histo(self, *args): 
 +        self.histo = .... 
 +         
 +class Screen2: 
 +    def __init__(self): 
 +        self.app = App.get_running_app() 
 +        # et appel de l'attribut histo de OSC avec 
 +        self.app.osc.histo 
 +        Clock.schedule_once(self._once, 1)
  
 +    def _once(self, dt):
 +        Clock.schedule_interval(self.update, 0.1)
 +        
 +    def update(self, dt): 
 +        blabla = self.app.osc.histo 
 +        # blabla retrouve la valeur de histo de OSC !!!!
 +</code>
  
  
Ligne 164: Ligne 217:
     background_color: 1, .3, .4, .85     background_color: 1, .3, .4, .85
 </code> </code>
 +Pour avoir des couleurs flashy, mettre des valeurs supérieures à 1: exemple\\ 
 +background_color: (0, 1.2, 0, 1) 
 +{{ :media_11:button_color.png?200 |}}
 =====Texte en gras dans un label===== =====Texte en gras dans un label=====
   * **[[https://kivy.org/doc/stable/api-kivy.core.text.markup.html|Text Markup]]**   * **[[https://kivy.org/doc/stable/api-kivy.core.text.markup.html|Text Markup]]**
Ligne 193: Ligne 248:
 android.permissions = INTERNET,CHANGE_WIFI_MULTICAST_STATE,ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE android.permissions = INTERNET,CHANGE_WIFI_MULTICAST_STATE,ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE
 </code> </code>
 +Les permissions définies dans buildozer.spec crée le bouton enable/disable dans Android / Paramètres / Application pour certaine permission: par défaut, il est disable. Quand ça ne marche pas, c'est la première chose à regarder.
 ===== Twisted dans kivy ===== ===== Twisted dans kivy =====
  
   * **[[https://kivy.org/doc/stable/guide/other-frameworks.html|Integrating with other Frameworks]]** propose l'intégration des 2 !   * **[[https://kivy.org/doc/stable/guide/other-frameworks.html|Integrating with other Frameworks]]** propose l'intégration des 2 !
   * **Exemple** avec [[apprendre_kivy|Apprendre Kivy]]   * **Exemple** avec [[apprendre_kivy|Apprendre Kivy]]
 +
 +=====Comment éviter ou résoudre des bugs à la compilation avec buildozer=====
 +===Comment commenter dans buildozer.spec ?===
 +Ne pas faire:
 +<code python>
 +requirements = python3,kivy,plyer,numpy,oscpy#,jnius
 +ni
 +requirements = python3,kivy,plyer,numpy,oscpy #,jnius
 +</code>
 +mais
 +<code python>
 +requirements = python3,kivy,plyer,numpy,oscpy
 +#,jnius
 +</code>
 +Le buildozer.spec est seulement presque du python. Ce commentaire maltapropo m'a donné des messages d'erreurs avec buildozer parlant de No module named 'encodings'
 +
 +=====Bugs=====
 +====Novembre 2020====
 +Voir [[https://duckduckgo.com/?q=kivy+%27xclip%27%3A+xclip++%27xsel%27%3A+xsel&t=h_&ia=web|xclip and xsel]]
 +  [CRITICAL] [Cutbuffer   ] Unable to find any valuable Cutbuffer provider. xclip - FileNotFoundError: [Errno 2] Aucun fichier ou dossier de ce type: 'xclip'
 +
 +résolu avec
 +  sudo apt install xclip
 +  
 +=====Comment avoir une action maintenue si maintien d'un Button=====
 +<code python accelerometer.kv>
 +            Button:
 +                id: recul
 +                markup: True
 +                background_color: (0, 1.2, 0, 1)
 +                font_size: "18sp"
 +                text: '[b]<<<[/b]'
 +                on_press: root.do_back_forward(-1)
 +                on_release: root.do_end()
 +            Button:
 +                id: avance
 +                markup: True
 +                background_color: (0, 1.2, 0, 1)
 +                font_size: "18sp"
 +                text: '[b]>>>[/b]'
 +                on_press: root.do_back_forward(1)
 +                on_release: root.do_end()
 +</code>
 +
 +<code python main.py>
 +    def do_back_forward(self, sens):
 +        self.bf = 1
 +        bt = Thread(target=self.back_forward_loop, args=(sens, ), daemon=True)
 +        bt.start()
 +
 +    def back_forward_loop(self, sens):
 +        while self.bf:
 +            sleep(0.1)
 +            self.gap = self.gap + sens*10
 +            if self.gap > 0: self.gap = 0
 +            l = len(self.app.osc.histo_xyz)
 +            if self.gap < -l + 500: self.gap = -l + 500
 +            print("Gap:", self.gap)
 +
 +    def do_end(self):
 +        self.bf = 0
 +</code>
  
  
-{{tag>kivy sb python3}}+{{tag> kivy python sb }}
kivy_comment_faire_un_tas_de_chose.1581941021.txt.gz · Dernière modification : 2020/02/17 12:03 de serge