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/01/20 17:49] – [Factory] 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}}**  
 **[[http://translate.google.com/translate?hl=&sl=auto&tl=en&u=https%3A%2F%2Fressources.labomedia.org%2Fkivy_comment_faire_un_tas_de_chose|English Version]]** **[[http://translate.google.com/translate?hl=&sl=auto&tl=en&u=https%3A%2F%2Fressources.labomedia.org%2Fkivy_comment_faire_un_tas_de_chose|English Version]]**
 </WRAP> </WRAP>
 +<WRAP center round box 40% centeralign> 
 +**[[les_pages_kivy_en_details|Les pages Kivy en détails]]** 
 +</WRAP>
 ===== Comment chercher ? ===== ===== Comment chercher ? =====
 ====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 15: 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 33: 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=====
 +  * Sur votre PC, définir la taille de votre fenêtre
 +<code python>
 +from plyer import utils
 +
 +from oscpy.client import OSCClient
 +from oscpy.server import OSCThreadServer
 +
 +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él: 1280*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>
 +
 +Lancer le main.py avec:
 +  KIVY_METRICS_FONTSCALE=1.2 python3 main.py
 +avec une valeur "1.2" à adapter pour que vous ayez le même graphisme sur votre PC que sur votre téléphone.
 +
 +
 =====Comment lister tous les widgets dans le python===== =====Comment lister tous les widgets dans le python=====
   * **[[https://kivy.org/doc/stable/api-kivy.uix.widget.html#kivy.uix.widget.Widget.walk|walking this tree]]**   * **[[https://kivy.org/doc/stable/api-kivy.uix.widget.html#kivy.uix.widget.Widget.walk|walking this tree]]**
Ligne 43: Ligne 80:
   print([type(widget) for widget in f.walk(loopback=True)])   print([type(widget) for widget in f.walk(loopback=True)])
      
-Sortie de [type(widget) for widget in self.walk(loopback=True)]+Sortie de [type(widget) for widget in self.walk(loopback=True)] dans SmartCitizen()
 <code> <code>
 <class '__main__.SmartCitizen'>, <class '__main__.SmartCitizen'>,
Ligne 55: Ligne 92:
 <class 'kivy.uix.label.Label'>, <class 'kivy.uix.label.Label'>,
 <class 'kivy.uix.boxlayout.BoxLayout'>, <class 'kivy.uix.boxlayout.BoxLayout'>,
-<class 'kivy.uix.boxlayout.BoxLayout'>, +......
-<class 'kivy.uix.gridlayout.GridLayout'>, +
-<class 'kivy.uix.boxlayout.BoxLayout'>, +
-<class 'kivy.uix.button.Button'>, +
-<class 'kivy.uix.boxlayout.BoxLayout'>, +
-<class 'kivy.uix.boxlayout.BoxLayout'>+
 </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 69: 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 150: 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 179: 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.1579542574.txt.gz · Dernière modification : 2020/01/20 17:49 de serge