IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Kivy Screen Manager


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Kivy Screen Manager
    Hello, 2ème post de la journée je me suis peut être embarqué dans un projet un peu trop compliqué
    J'essaye de me créer une appli qui me donne l'heure du prochain bus qui vas passer.
    Je me suis dit que ça pourrait être pratique de l'avoir sur mon téléphone et j'ai commencer à utiliser le module kivy et kivymd, j'ai bien compris mais depuis presque 1h je suis confronté à une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    File "C:\Users\oscar\PycharmProjects\pythonProject2\alt.py", line 20, in build
         sm.add_widget(Screen1(name = "screen1"))
     TypeError: ScreenManager.add_widget() missing 1 required positional argument: 'widget'
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    from kivymd.app import MDApp
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.screenmanager import ScreenManager, Screen
    from kivy.lang import Builder
     
     
    class Screen1(Screen):
        pass
     
     
    class Screen2(Screen):
        pass
     
     
    class Main(MDApp):
        def build(self):
            Builder.load_file("mybus.kv")
     
            sm = ScreenManager
            sm.add_widget(Screen1(name = "screen1"))
            sm.add_widget(Screen2(name = "screen2"))
     
            return sm
     
     
    Main().run()
    Et voici le fichier .kv :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <Screen1>
        MDLabel:
            text: "Aller ou Retour ?"
            halign: "center"
        MDRaisedButton:
            text: "Aller"
            on_release: root.manager.current = "screen2"
        MDRaisedButton:
            text: "Retour"
            on_release: root.manager.current = "screen2"
    <Screen2>
        MDImage:
            source: logo.jpeg

  2. #2
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Je n'utilise personnellement pas kiwy(donc jamais étudié) ,mais je constate que ton fichier .kv n'est pas conforme à la syntaxe explicitée dans le tutoriel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1#:kivy 1.0.9
     2
     3<PongGame>:
    Le tutoriel indique que la ligne 1 est obligatoire et tu peux visualiser la présence de deux points( en ligne 3
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Nouveau problème toujours sur Kivy, j'ai réussi à faire tout ce que je voulais avec mon screen manager etc..
    Maintenant je veux récupérer la valeur donnée par l'utilisateur dans le text_input et afficher le résultat dans le label_result (qui est mon text label)
    J'ai tester avec le débuggeur la variable heur est bien un str mais quand j'éxécute le programme le feedback et soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    File "C:\Users\oscar\PycharmProjects\pythonProject2\alt.py", line 50, in <module>
         Main().run()
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\app.py", line 955, in run
         runTouchApp()
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\base.py", line 574, in runTouchApp
         EventLoop.mainloop()
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\base.py", line 339, in mainloop
    Soit celui qui m'étonne plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Traceback (most recent call last):
       File "C:\Users\oscar\PycharmProjects\pythonProject2\alt.py", line 50, in <module>
         Main().run()
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\app.py", line 955, in run
         runTouchApp()
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\base.py", line 574, in runTouchApp
         EventLoop.mainloop()
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\base.py", line 339, in mainloop
         self.idle()
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\base.py", line 383, in idle
         self.dispatch_input()
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\base.py", line 334, in dispatch_input
         post_dispatch_input(*pop(0))
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\base.py", line 263, in post_dispatch_input
         listener.dispatch('on_motion', etype, me)
       File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\core\window\__init__.py", line 1660, in on_motion
         self.dispatch('on_touch_down', me)
       File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\core\window\__init__.py", line 1677, in on_touch_down
         if w.dispatch('on_touch_down', touch):
       File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\uix\screenmanager.py", line 1210, in on_touch_down
         return super(ScreenManager, self).on_touch_down(touch)
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\uix\widget.py", line 589, in on_touch_down
         if child.dispatch('on_touch_down', touch):
       File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\uix\relativelayout.py", line 306, in on_touch_down
         ret = super(RelativeLayout, self).on_touch_down(touch)
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\uix\widget.py", line 589, in on_touch_down
         if child.dispatch('on_touch_down', touch):
       File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\uix\widget.py", line 589, in on_touch_down
         if child.dispatch('on_touch_down', touch):
       File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\uix\behaviors\button.py", line 151, in on_touch_down
         self.dispatch('on_press')
       File "kivy\_event.pyx", line 727, in kivy._event.EventDispatcher.dispatch
       File "kivy\_event.pyx", line 1307, in kivy._event.EventObservers.dispatch
       File "kivy\_event.pyx", line 1191, in kivy._event.EventObservers._dispatch
       File "C:\Users\oscar\PycharmProjects\pythonProject2\venv\lib\site-packages\kivy\lang\builder.py", line 55, in custom_callback
         exec(__kvlang__.co_value, idmap)
       File "C:\Users\oscar\PycharmProjects\pythonProject2\mybus.kv", line 53, in <module>
         on_press: root.give_horaire()
       File "C:\Users\oscar\PycharmProjects\pythonProject2\alt.py", line 32, in give_horaire
         self.result_label.text = ("Le prochain bus passera à", str(heure))
       File "kivy\weakproxy.pyx", line 35, in kivy.weakproxy.WeakProxy.__setattr__
       File "kivy\properties.pyx", line 520, in kivy.properties.Property.__set__
       File "kivy\properties.pyx", line 564, in kivy.properties.Property.set
       File "kivy\properties.pyx", line 555, in kivy.properties.Property.set
       File "kivy\properties.pyx", line 797, in kivy.properties.StringProperty.check
     ValueError: Label.text accept only str
    
    Process finished with exit code -1073741819 (0xC0000005)
    Il m'explique donc que ma variable heure est un float ?
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    from kivy import *
    from kivymd.app import MDApp
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.screenmanager import ScreenManager, Screen
    from kivy.lang import Builder
     
     
    class Screen1(Screen):
     
            def aller(self):
                global lst
                lst = [6.45, 7.16, 7.50, 8.21, 8.49, 9.17, 9.46, 10.16, 10.46, 11.16, 11.47, 12.17, 12.47, 13.16, 13.51,
                    14.21, 14.50, 15.21, 15.53, 16.23, 16.54, 17.23, 17.53, 18.23, 18.53, 19.21, 19.51, 20.21, 20.49]
                return lst
     
            def retour(self):
                global lst
                lst = [6.39, 7.09, 7.35, 7.35, 8.10, 8.40, 9.10, 9.40, 10.09, 10.39, 11.09, 11.39, 12.09, 12.44, 13.14,
                       13.45, 14.14, 14.44, 15.14, 15.44, 16.14, 16.44, 17.14, 17.44, 18.15, 18.45, 19.15, 19.45, 20.14,
                       20.44]
                return lst
     
     
    class Screen2(Screen):
     
        def give_horaire(self):
            def closestsup(lst, k):
                return lst[min(range(len(lst)), key=lambda i: (lst[i] - k) if (lst[i] - k) > 0 else max(lst))]
     
            k = float(self.answer_value.text)
            heure = str(closestsup(lst, k))
            self.result_label.text = ("Le prochain bus passera à", str(heure))
            print("le prochain bus passera à" + heure)
            self.result_label.size = "15"
     
     
    class Main(MDApp):
     
        def build(self):
            Builder.load_file("mybus.kv")
     
            sm = ScreenManager()
            sm.add_widget(Screen1(name="screen1"))
            sm.add_widget(Screen2(name="screen2"))
     
            return sm
     
     
    if __name__ == '__main__':
        Main().run()

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    hello,
    Citation Envoyé par Viking24 Voir le message
    Maintenant je veux récupérer la valeur donnée par l'utilisateur dans le text_input et afficher le résultat dans le label_result (qui est mon text label)
    si tu ne nous montres pas le nouveau fichier mybus.kv cela va être plus difficile de t'aider.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.result_label.text = ("Le prochain bus passera à", str(heure))
    affecter un tuple à une chaîne. Cela devrait plutôt être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.result_label.text = "Le prochain bus passera à " + str(heure)
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 101
    Points : 4 446
    Points
    4 446
    Par défaut
    Bonjour
    Citation Envoyé par Viking24 Voir le message
    J'ai tester avec le débuggeur la variable heur est bien un str mais quand j'éxécute le programme le feedback et soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       File "C:\Users\oscar\PycharmProjects\pythonProject2\alt.py", line 32, in give_horaire
         self.result_label.text = ("Le prochain bus passera à", str(heure))
     ValueError: Label.text accept only str
    Il m'explique donc que ma variable heure est un float ?
    Tout est donné dans le message d'erreur

    OUI, heure est sans doute une chaine mais, en python, ("Le prochain bus passera à", str(heure)) ne retourne pas une chaine
    Existe des tutos débutant (lire passage sur manipuler les chaines et ... les tuples).
    $moi= ( !== ) ? : ;

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    ah bah ouais erreur débile mais même après avoir supprimé les parenthèses meme message d'erreur et btw voici le .kv :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <Screen1>:
        MDLabel:
            text: "Aller ou Retour ?"
            font_size: 60
            bold: True
            halign: "center"
        BoxLayout:
            orientation: "horizontal"
            background_color: "#BBA2FF"
            Button:
                text: "Aller"
                on_release: root.manager.current = "screen2"
                size_hint: 0.2, 0.2
                on_press: root.aller()
            Button:
                text: "Retour"
                on_release: root.manager.current = "screen2"
                size_hint: 0.2, 0.2
    <Screen2>:
        answer_value:answer_value
        result_label:result_label
        BoxLayout:
            orientation: "vertical"
            Image:
                source : "logo.jpeg"
                allow_stretch: True
                keep_ratio: False
                size_hint: None, None
                width: self.parent.width
                height: self.parent.height/self.image_ratio
            Label:
                id: result_label
                text: "Quelle heure est-il ?"
                font_size: 60
                background_color: (6.33, 0.80, 0.5, 255)
                canvas.before:
                    Color:
                        rgba: self.background_color
                    Rectangle:
                        size: self.size
                        pos: self.pos
            TextInput:
                id: answer_value
                size_hint: 1, 0.5
                font_size: 32
                input_type: "number"
                multiline: False
            Button:
                text: "Validate"
                size_hint: 1, 0.5
                bold: True
                background_color: (0.33, 0.63, 3.19, 1)
                on_press: root.give_horaire()

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 101
    Points : 4 446
    Points
    4 446
    Par défaut
    Citation Envoyé par Viking24 Voir le message
    ah bah ouais erreur débile
    C'est une erreur de codage et non algoritmique, Cela n'existe pas avec le codage soit on sais, soit on doit se plonger dans la doc pour apprendre
    Citation Envoyé par Viking24 Voir le message
    même après avoir supprimé les parenthèses meme message d'erreur et btw voici le .kv :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # ceci ? 
    self.result_label.text = "Le prochain bus passera à", str(heure)
    Juste enlever les parenthèses ? Donc tout est normal, en python cela ne change strictement rien. Même remarque : les tutos de base...
    $moi= ( !== ) ? : ;

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Viking24 Voir le message
    mais même après avoir supprimé les parenthèses meme message d'erreur
    Si vous n'avez supprimé que les parenthèses, vous aurez appris que c'est la ',' qui fait le tuple...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci à tous et bien je vais aller revoir les listes et les tuples
    Au moins j'aurai appris quelque chose !

Discussions similaires

  1. [Python 3.X] Mise à jour des screens (Kivy)
    Par ChimayR dans le forum GUI
    Réponses: 3
    Dernier message: 05/02/2019, 19h55
  2. Comment faire un splash screen pour son application?
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/04/2007, 14h28
  3. Problème dans analisys Manager
    Par ien_ien23 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 11/07/2003, 14h38
  4. traduction du terme "managed"
    Par sarasvati dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 14/05/2003, 23h01
  5. A propos des 'File management Functions' de Windows
    Par znaidi dans le forum Windows
    Réponses: 3
    Dernier message: 01/04/2003, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo