Bonjour a toutes et a tous.
Je me retrouve dans une position que je n'arrive pas à résoudre et ce n'est pas faute de chercher.
Un ami m'a filé une formation python que je suis, mais je me retrouve devant un problème. Pendant le cours des layout kivy le formateur place du code dans le fichier python pour automatiser la création de bouton. Tout semble marcher chez lui, mais chez moi pas du tout. J'ai beau chercher sur le net, je ne trouve personne avec mon problème...
Le problème semble venir de l'utilisation d'un fichier .kv externe en plus d'un appel a la metode .add_widget() . En effet, quand je lance des morceaux de code trouver sur Internet n'utilisant pas de fichier .kv tout marche à merveille
mon code python
main.py
le fichier kvCode:from kivy.app import App from kivy.uix.anchorlayout import AnchorLayout from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button from kivy.uix.gridlayout import GridLayout from kivy.uix.stacklayout import StackLayout from kivy.uix.widget import Widget class MainWidget(Widget): #Un widget est un controle que l on affiche a l'ecran pass class BoxLayoutExemple(BoxLayout): pass '''def __int__(self, **kwargs):#**kwargs kivy a bosoin de passer des argument pour fonctionner !!!!!!! super().__init__(**kwargs) b1 = Button(text='A')# la syntax est differente (: / =) car le bouton est coder dans le fichier python b2 = Button(text='B') self.add_widget(b1) self.add_widget(b2)''' class AnchorLayoutExemple(AnchorLayout): pass #class GridLayoutExemple2(GridLayout): #Specifié dans le fichier kv mais empeche d ecrire du code ici # pass class StackLayoutExemple(StackLayout): def __int__(self,**kwargs): super().__int__(**kwargs) b = Button(texte="Z") self.add_widget(b) class LeLabApp(App): pass LeLabApp().run()
lelab.kv
Code:#Widget contenu dynamique #BoxLayoutExemple Stack les element sur une seul ligne et defini la taille pour prendre toute la place #AnchorLayout stack un element par raport a la fenetre #GridLayout placer plusieur element par ligne et par colones #StackLayout Stack les element d un taille defini et passe a la ligne StackLayoutExemple: <MainWidget>: Button: text:"Hello" size:"100dp",'60dp'# 40dp~largeure d un doigt pos:'200dp','100dp' Label: text:"Hello2" size:"100dp",'60dp' pos:'200dp','160dp' color:1,1,0.4,1 # R,V,B,A <BoxLayoutExemple>: orientation:'horizontal' Button: text:'A' #size_hint:None, None # l on indique que l on vas utiliser une taille fix # size:"100dp",'60dp'#et on defini la taille fix size_hint:0.5, None # w 100%,None l on indique que l on vas utiliser une taille special height: '60dp' pos_hint: { "center_y" : 0.5 } #pren un parametre par coordoné poin de ref en bas a gauche #x, right, center_x / y, top, center_y BoxLayout: orientation:'vertical' spacing: '10dp'#Equivalen du padding??? en css Button: text:'B1' Button: text:'B2' Button: text:'B3' Button: text:'B4' Button: text:'B' size:"100dp",'60dp'#ignoré le layout deffini la taille size_hint:1, 2 #100%, 200% Propiété de taille utiliser dans les layout *_hint utiliser en %(float) Button: text:'c' <GridLayoutExemple@GridLayout>: #Propiété obligatoire # row --lignes # cols --colones cols:3 Button: text:'A' size_hint: None , 1#!!!!!! Passer ces parametre dans le button D qui est dans la meme colonne width: '60dp' BoxLayoutExemple:#on apelle un BoxLayout costruit plus haut Button: text:'C' Button: text:'D' size_hint: None , 1#!!!!!! Passer ces parametre dans le button A qui est dans la meme colonne width: '60dp' Button: text:'E' <StackLayoutExemple>: Button: text: 'A' size_hint:0.2,0.2 Button: text: 'B' size_hint:0.2,0.2
-----