Ceci est une ancienne révision du document !
Table des matières
Kivy: Comment faire un tas de chose
Pourquoi kivy est-il traître ?
Kivy masque des erreurs python
Par exemple:
- un argument qui manque dans un appel de méthode lève une erreur pour du python habituel, mais pas dans kivy. D'où un débogage rusé nécessaire !
Comment lister tous les widgets dans le python
Par exemple, extrait de smartcitizen main.py#L83:
# Recherche de tous les widgets de self print([type(widget) for widget in self.walk(loopback=True)]) # Recherche de tous les widgets de Screen1 print(self.ids.sm) f = self.ids.sm.get_screen("first") print([type(widget) for widget in f.walk(loopback=True)])
Sortie de [type(widget) for widget in self.walk(loopback=True)]
<class '__main__.SmartCitizen'>, <class 'kivy.uix.actionbar.ActionBar'>, <class 'kivy.uix.actionbar.ActionView'>, <class 'kivy.uix.actionbar.ActionButton'>, <class 'kivy.uix.image.Image'>, <class 'kivy.uix.screenmanager.ScreenManager'>, <class '__main__.MainScreen'>, <class 'kivy.uix.boxlayout.BoxLayout'>, <class 'kivy.uix.label.Label'>, <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'>
Comment passer d'une class à une autre
En fait, comment passer d'un objet à un autre !
Faire des print(de quoi ?). Commencer par
print(dir(self))
puis dans la liste des méthodes et attributs, ayez de nez. Si app est dans la liste:
print(dir(self.app))
La commande magique
Dans Blender, le raccourcis magique c'est: Ctrl + A Apply the object's transformation to its data
Dans le *.kv, c'est: Graphical Instructions
canvas: Clear
Pourquoi définir les attributs appelés dans *.kv comme attributs de classe ?
Parce que c'est comme ça ? Quand lama fâché, lui toujours faire ainsi !
Voir l'exemple ci-dessous.
Comment changer la couleur d'un Rectangle ?
Répond aussi à la Question:
Comment définir et accéder aux attributs dans le main et le *.kv ?
Les attributs des widgets défini dans le *.kv sont accessibles depuis le main, seulement si les attributs du widget sont définis en attribut de classe.
Exemple extrait de multipong:
*.kv
<PongPaddle>: canvas: Color: rgb: self.rect_color Rectangle: pos: self.pos size: root.height/65, root.height/7 <Screen1>: ... ... paddle_0: paddle0 ... ... PongPaddle: # paddle_0 id: paddle0 pos: self.pos ... ... BoxLayout: orientation: 'horizontal' BoxLayout: size_hint_x: 0.70 canvas: Color: rgba: 1, 1, 1, 1 Line: points: [int(x*(root.top/720)) for x in root.points] joint: 'miter' width: 3 close: 1
extrait de main.py
... ... class PongPaddle(Widget): rect_color = ListProperty([1, 1, 1]) angle = NumericProperty(0) ... ... class Screen1(Screen): ... ... def apply_paddle_red_color(self, my_num): if my_num == 0: self.paddle_0.rect_color = 1, 0, 0 ... ...
Factory
Factory peut être utilisée pour enregistrer automatiquement toute classe ou module et en instancier des classes n'importe où dans votre projet.
- API Factory using-factory-objects-in-kivy î'm not sure of everything the Factory is used for …Dans les exemples, c'est utilisé pour enregistrer des widgets, dans des trucs sans kv.
Réception sur Android en Multicast
Dans buildozer.spec, définir:
android.permissions = INTERNET,CHANGE_WIFI_MULTICAST_STATE,ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE
Twisted dans kivy
- Integrating with other Frameworks propose l'intégration des 2 !
- Exemple avec Apprendre Kivy