kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition import time import random class FirstScreen(Screen): pass class SecondScreen(Screen): pass class ColourScreen(Screen): colour = ListProperty([1., 0., 0., 1.]) class MyScreenManager(ScreenManager): def new_colour_screen(self): name = str(time.time()) s = ColourScreen(name=name, colour=[random.random() for _ in range(3)] + [1]) self.add_widget(s) self.current = name root_widget = Builder.load_string(''' #:import FadeTransition kivy.uix.screenmanager.FadeTransition MyScreenManager: transition: FadeTransition() FirstScreen: SecondScreen: <FirstScreen>: name: 'first' BoxLayout: orientation: 'vertical' Label: text: 'first screen!' font_size: 30 Image: source: 'logo.png' allow_stretch: False keep_ratio: False BoxLayout: Button: text: 'goto second screen' font_size: 30 on_release: app.root.current = 'second' Button: text: 'get random colour screen' font_size: 30 on_release: app.root.new_colour_screen() <SecondScreen>: name: 'second' BoxLayout: orientation: 'vertical' Label: text: 'second screen!' font_size: 30 Image: source: 'logo1.jpg' allow_stretch: False keep_ratio: False BoxLayout: Button: text: 'goto first screen' font_size: 30 on_release: app.root.current = 'first' Button: text: 'get random colour screen' font_size: 30 on_release: app.root.new_colour_screen() <ColourScreen>: BoxLayout: orientation: 'vertical' Label: text: 'colour {:.2},{:.2},{:.2} screen'.format(*root.colour[:3]) font_size: 30 Widget: canvas: Color: rgba: root.colour Ellipse: pos: self.pos size: self.size BoxLayout: Button: text: 'goto first screen' font_size: 30 on_release: app.root.current = 'first' Button: text: 'get random colour screen' font_size: 30 on_release: app.root.new_colour_screen() ''') class ScreenManagerApp(App): def build(self): return root_widget ScreenManagerApp().run()
Jetons un coup d'œil à un exemple assez intéressant, où nous allons lier l'interaction de deux widgets ensemble en utilisant la méthode bind.
from kivy.app import App from kivy.uix.scatter import Scatter from kivy.uix.label import Label from kivy.uix.floatlayout import FloatLayout from kivy.uix.boxlayout import BoxLayout from kivy.uix.textinput import TextInput class SimpleApp(App): def build(self): b = BoxLayout(orientation="vertical") t = TextInput(font_size=100,text="default",size_hint_y=None, height=100) f = FloatLayout() s = Scatter() l = Label(text="default", font_size=150) t.bind(text=l.setter("text")) f.add_widget(s) s.add_widget(l) b.add_widget(t) b.add_widget(f) return b if __name__ == "__main__": SimpleApp().run()
Au fur et à mesure que notre application se complexifie, il devient difficile de maintenir la construction du widget tress et la déclaration explicite des liaisons. Pour surmonter ces lacunes, le langage kv est une alternative, également connue sous le nom de langage kivy ou kvlang.
Le langage kv vous permet de créer l'arborescence des widgets de manière déclarative, il permet des prototypes très rapides et des modifications agiles de l'interface utilisateur. Cela aide également en séparant la logique de l'application de l'interface utilisateur.
Vous pouvez suivre deux méthodes pour charger le fichier kv dans votre application.
SimpleApp - simple.kv
Builder.load_file("filename.kv") #or Builder.load_string(''' ''') #you can directly put your kv file as string using this approach.
La racine est déclarée en déclarant la classe de votre widget racine
Widget:
<Widget>:
from kivy.app import App from kivy.uix.scatter import Scatter from kivy.uix.label import Label from kivy.uix.floatlayout import FloatLayout from kivy.uix.textinput import TextInput from kivy.uix.boxlayout import BoxLayout class ScatterTextWidget(BoxLayout): pass class SimpleApp(App): def build(self): return ScatterTextWidget() if __name__ == "__main__": SimpleApp().run()
<ScatterTextWidget>: orientation:
Découvrez nos actualités, conseils et tutoriels pour rester à jour
Aujourd'hui, les API REST sont indispensa...
Distribuer une application Django à des...
FastAPI est un framework Python moderne qui per...
Ce guide est conçu pour les début...
Inscription en cours...
Restez informé de nos dernières actualités et recevez nos meilleurs conseils !
Chargement du formulaire de devis...