Ceci est une ancienne révision du document !
Table des matières
Kivy: Comment faire un tas de chose
Comment chercher ?
Sur internet
- Dans la 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
médiocresfausses, uniquement motivées par le gain de points !
Une bonne solution: Les exemples des sources de kivy
Des explications avec les exemples des sources
Une liste de scripts qui explique bien:
- pos_hint : boxlayout_poshint.py
- bubble : bubble_test.py
- camera : camera.py
- carousel : carousel_buttons.py
- mipmap : label_mipmap.py
- text_size = textwrap : label_text_size.py
- text with markup : label_with_markup.py
- popup : popup_with_kv.py
- scatter : scatter.py et scatter.kv
- scrollview : scrollview.py et scrollview.kv
- splitter : splitter.py
- tabbed panel = onglet : tabbedpanel.py
- text align : textalign.py textalign.kv
- video player : videoplayer.py
- ErrorPopup(Popup) : main.py et text2speechdemo.kv
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))
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 ... ...
Button background_color
Button: background_normal: '' background_color: 1, .3, .4, .85
Texte en gras dans un label
Label: canvas.before: Color: rgba: 1, 1, 1, 1 Rectangle: pos: self.pos size: self.size size_hint_y: 0.10 markup: True text: '[b]' + "Mon texte" + '[/b]' color: 1, 0, 0.5, 1
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