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

Tkinter Python Discussion :

Problème de valeurs sur Python_Projet ISN


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Par défaut Problème de valeurs sur Python_Projet ISN
    Voilà, c'est la 1ère fois que je poste ici. J'ai fait quelques recherches sur le site pour trouver réponse à mon problème mais sans succès.

    Donc je suis une grande novice en programmation, à vrai dire c'est pour mon projet du bac en informatique (soyez indulgent^^). Le but est de faire une borne de restauration où l'on peut prendre sa commande et ainsi de se faire livrer (ici afficher) le menu sélectionné via turtle (on a dessiner nos sandwichs, boissons, etc), que l'on appelle avec coca.fcoca, etc.

    J'utilise donc python3.3.4 et voilà mon problème :

    Lorsque que je donne une valeur aux différents menus pour qu'il me propose différents choix ça marche très, pour l'exemple, var_choix prend donc la valeur "MaxiBest of" et si je choisis le Big Mac, var_choix2 devrait prendre la valeur "Big" logiquement.

    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
    55
    56
    57
    58
    from tkinter import *
    import random
    from turtle import *
    import bacon, coca, royalcheese
     
    prix=0
     
    def sandwich():
            global var_choix2
            global prix
            fenetre2=Tk()
            champ_label=Label(fenetre2, text="CHOIX SANDWICH")
            champ_label.pack()
     
            var_choix2 = StringVar()
     
            if var_choix.get()=="MaxiBest of":
     
                    prix=10
     
     
                    choix_sandwich1 = Radiobutton(fenetre2, text="Big Mac", variable=var_choix2, value="Big", bg="blue", bd= 20, width=20)
                    choix_sandwich2 = Radiobutton(fenetre2, text="Nuggets x9", variable=var_choix2, value="Nugg9", bg="red", bd= 20, width=20)
                    choix_sandwich3 = Radiobutton(fenetre2, text="Royal Cheese", variable=var_choix2, value="Cheese", bg="green", bd= 20, width=20)
     
                    choix_sandwich1.pack()
                    choix_sandwich2.pack()
                    choix_sandwich3.pack()
     
     
                    bouton_confirme2 = Button(fenetre2, text="Je veux ce sandwich!", command=accompagnement, bg='coral', bd=20)
                    bouton_confirme2.pack()
     
    #j'ai enlevé ici une partie du script inutile 
     
    def valide():
    	bouton_confirme.pack()
     
    fenetre=Tk()
    champ_label=Label(fenetre, text="CHOIX MENU")
    champ_label.pack()
     
     
     
    var_choix = StringVar()
     
    choix_menu1 = Radiobutton(fenetre, text="Menu Maxi Best of", variable=var_choix, value="MaxiBest of", bg="deepskyblue", bd= 20, width=20, command=valide)
    choix_menu2 = Radiobutton(fenetre, text="Menu Best of", variable=var_choix, value="Best of", bg="red", bd= 20, width=20, command=valide)
    choix_menu3 = Radiobutton(fenetre, text="Menu Happy Meal", variable=var_choix, value="Happy Meal", bg="green", bd= 20, width=20, command=valide)
     
    choix_menu1.pack()
    choix_menu2.pack()
    choix_menu3.pack()
     
    bouton_confirme = Button(fenetre, text="Confirmer", command=sandwich,  bg="khaki", bd=10)
     
     
    fenetre.mainloop()
    Et pourtant à la fin il s'affiche seulement ma fenêtre sans mes boutons alors que var_choix2 devrait avoir la valeur "Big".

    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
    def miam():
            global var_choix2
            fenetre=Tk()
            if var_choix2.get()=="Big":
                    bouton_sand = Button(fenetre, text="Votre sandwich", command=bacon.fbacon)
                    bouton_boi = Button(fenetre, text="Votre boisson", command=coca.fcoca)
     
                    bouton_sand.pack()
                    bouton_boi.pack()
     
            if var_choix2.get()=="Cheese":
                    bouton_sand= Button(fenetre, text="Votre sandwich", command=bacon.froyal)
                    bouton_boi = Button(fenetre, text="Votre boisson", command=coca.fcoca)
     
                    bouton_sand.pack()
                    bouton_boi.pack()
    Voilà je tourne en rond depuis un moment, une petite aide serait la bienvenue
    Je vous met les fichiers complet si besoin: coca.py bacon.py royalcheese.py projet.py

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CelineZelda Voir le message
    Voilà, c'est la 1ère fois que je poste ici. J'ai fait quelques recherches sur le site pour trouver réponse à mon problème mais sans succès.

    Donc je suis une grande novice en programmation, à vrai dire c'est pour mon projet du bac en informatique (soyez indulgent^^). Le but est de faire une borne de restauration où l'on peut prendre sa commande et ainsi de se faire livrer (ici afficher) le menu sélectionné via turtle (on a dessiner nos sandwichs, boissons, etc), que l'on appelle avec coca.fcoca, etc.

    J'utilise donc python3.3.4 et voilà mon problème :

    Lorsque que je donne une valeur aux différents menus pour qu'il me propose différents choix ça marche très, pour l'exemple, var_choix prend donc la valeur "MaxiBest of" et si je choisis le Big Mac, var_choix2 devrait prendre la valeur "Big" logiquement.

    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
    55
    56
    57
    58
    from tkinter import *
    import random
    from turtle import *
    import bacon, coca, royalcheese
     
    prix=0
     
    def sandwich():
            global var_choix2
            global prix
            fenetre2=Tk()
            champ_label=Label(fenetre2, text="CHOIX SANDWICH")
            champ_label.pack()
     
            var_choix2 = StringVar()
     
            if var_choix.get()=="MaxiBest of":
     
                    prix=10
     
     
                    choix_sandwich1 = Radiobutton(fenetre2, text="Big Mac", variable=var_choix2, value="Big", bg="blue", bd= 20, width=20)
                    choix_sandwich2 = Radiobutton(fenetre2, text="Nuggets x9", variable=var_choix2, value="Nugg9", bg="red", bd= 20, width=20)
                    choix_sandwich3 = Radiobutton(fenetre2, text="Royal Cheese", variable=var_choix2, value="Cheese", bg="green", bd= 20, width=20)
     
                    choix_sandwich1.pack()
                    choix_sandwich2.pack()
                    choix_sandwich3.pack()
     
     
                    bouton_confirme2 = Button(fenetre2, text="Je veux ce sandwich!", command=accompagnement, bg='coral', bd=20)
                    bouton_confirme2.pack()
     
    #j'ai enlevé ici une partie du script inutile 
     
    def valide():
    	bouton_confirme.pack()
     
    fenetre=Tk()
    champ_label=Label(fenetre, text="CHOIX MENU")
    champ_label.pack()
     
     
     
    var_choix = StringVar()
     
    choix_menu1 = Radiobutton(fenetre, text="Menu Maxi Best of", variable=var_choix, value="MaxiBest of", bg="deepskyblue", bd= 20, width=20, command=valide)
    choix_menu2 = Radiobutton(fenetre, text="Menu Best of", variable=var_choix, value="Best of", bg="red", bd= 20, width=20, command=valide)
    choix_menu3 = Radiobutton(fenetre, text="Menu Happy Meal", variable=var_choix, value="Happy Meal", bg="green", bd= 20, width=20, command=valide)
     
    choix_menu1.pack()
    choix_menu2.pack()
    choix_menu3.pack()
     
    bouton_confirme = Button(fenetre, text="Confirmer", command=sandwich,  bg="khaki", bd=10)
     
     
    fenetre.mainloop()
    Et pourtant à la fin il s'affiche seulement ma fenêtre sans mes boutons alors que var_choix2 devrait avoir la valeur "Big".

    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
    def miam():
            global var_choix2
            fenetre=Tk()
            if var_choix2.get()=="Big":
                    bouton_sand = Button(fenetre, text="Votre sandwich", command=bacon.fbacon)
                    bouton_boi = Button(fenetre, text="Votre boisson", command=coca.fcoca)
     
                    bouton_sand.pack()
                    bouton_boi.pack()
     
            if var_choix2.get()=="Cheese":
                    bouton_sand= Button(fenetre, text="Votre sandwich", command=bacon.froyal)
                    bouton_boi = Button(fenetre, text="Votre boisson", command=coca.fcoca)
     
                    bouton_sand.pack()
                    bouton_boi.pack()
    Voilà je tourne en rond depuis un moment, une petite aide serait la bienvenue
    Je vous met les fichiers complet si besoin: coca.py bacon.py royalcheese.py projet.py
    Bonjour,

    Vous avez enlevé une partie du script que vous avez jugé inutile. Or, pour tracer votre problème, j'aurais justement besoin de l'intégralité du script :

    1. pour pouvoir le tester en live sur mon PC
    2. pour savoir ce qui se passe entre l'étape sandwich() et l'étape miam()

    J'ai essayé votre script projet.py et fichiers rattachés, mais il ne contient pas d'étape miam() et semble même en décalage par rapport au code que vous publiez.

    Pourriez-vous SVP publier le code qui pose problème au complet et si possible rattacher des fichiers à jour ?

    Merci.

    En attendant, ajoutez une trace console pour connaître la vraie valeur de votre variable var_choix2 :

    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
    def miam():
            global var_choix2
            # ceci s'affichera dans la console (fenêtre noire)
            print("var_choix2:", var_choix2.get())
            fenetre=Tk()
            if var_choix2.get()=="Big":
                    bouton_sand = Button(fenetre, text="Votre sandwich", command=bacon.fbacon)
                    bouton_boi = Button(fenetre, text="Votre boisson", command=coca.fcoca)
     
                    bouton_sand.pack()
                    bouton_boi.pack()
     
            if var_choix2.get()=="Cheese":
                    bouton_sand= Button(fenetre, text="Votre sandwich", command=bacon.froyal)
                    bouton_boi = Button(fenetre, text="Votre boisson", command=coca.fcoca)
     
                    bouton_sand.pack()
                    bouton_boi.pack()
    Si ça se trouve, vous utilisez accidentellement var_choix2 dans un autre formulaire.

    @+.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Par défaut
    J'ai pas mis le bon fichier, désolé j'suis un peu cruche ^^ voilà le fichier : polo.pypolo.py

    J'y ai apporté quelques changements mais à la fin var_choix2 ne prend que la valeur du dernier bouton qu'importe le choix du sandwich.

    Je rajoute aussi les autres fichiers dessinant les sandwich du menu avec turtle : nuggets.py bigmc.py
    Fichiers attachés Fichiers attachés

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CelineZelda Voir le message
    J'ai pas mis le bon fichier, désolé j'suis un peu cruche ^^ voilà le fichier : polo.pypolo.py

    J'y ai apporté quelques changements mais à la fin var_choix2 ne prend que la valeur du dernier bouton qu'importe le choix du sandwich.

    Je rajoute aussi les autres fichiers dessinant les sandwich du menu avec turtle : nuggets.py bigmc.py
    Bien, on y voit plus clair.

    Alors, d'entrée de jeu, vous avez une erreur classique ici :

    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
    def sandwich():
            global var_choix2
            global prix
            fenetre2=Tk()
            champ_label=Label(fenetre2, text="CHOIX SANDWICH")
            champ_label.pack()
            print("var_choix:", var_choix.get())
            print("var_choix2:", var_choix2.get())
     
            if var_choix.get()=="MaxiBest of":
     
                    prix=10
                    # NON NON NON !
                    choix_sandwich1 = Radiobutton(fenetre2, text="Big Mac", variable=var_choix2, value="Big", bg="blue", bd= 20, width=20, command=attribuer("Big")) # NON!
                    choix_sandwich2 = Radiobutton(fenetre2, text="Nuggets", variable=var_choix2, value="Nugg", bg="red", bd= 20, width=20, command=attribuer("Nugg")) # NON!
                    choix_sandwich3 = Radiobutton(fenetre2, text="Royal Cheese", variable=var_choix2, value="Cheese", bg="green", bd= 20, width=20, command=attribuer("Cheese")) # NON!
     
                    choix_sandwich1.pack()
                    choix_sandwich2.pack()
                    choix_sandwich3.pack()
    Quand vous désignez une fonction dans Radiobutton(..., command=fonction), le mot-clé command attend une fonction (en réalité l'adresse mémoire d'une fonction) et non pas la valeur retour d'une fonction.

    Si vous écrivez Radiobutton(..., command=attribuer("Big")), cela signifie que l'ordinateur d'abord va appeler la fonction attribuer() avec l'argument "Big" et ensuite affecter à command la valeur retour de la fonction attribuer, en l'occurrence dans notre exemple, la valeur None puisque votre fonction attribuer() ne retourne pas de valeur.

    J'ajoute en outre que dans attribuer, vous affectez var_choix2.set(value) ce qui est un non-sens total : lorsque vous déclarez Radiobutton(..., variable=var_choix2, ...) vous demandez à votre objet Radiobutton() de gérer var_choix2 pour vous.

    Lorsque l'utilisateur cliquera sur l'objet Radiobutton(), ce dernier affectera automatiquement la valeur contenue dans Radiobutton(..., value="Big") à var_choix2, vous n'avez pas à vous en soucier.

    Pour dire les choses simplement, partout où vous avez déclaré un Radiobutton(..., command=attribuer(......)) vous pouvez virer command=attribuer(.....).

    Profitez-en pour virer aussi la fonction attribuer() qui est non seulement inutile mais carrément fautive.

    Je regarde s'il n'y a pas d'autres problèmes...

    @+.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Par défaut
    Si j'enlève toutes les commandes attribuer comme tu me le conseilles je retourne au point de départ. Et c'est là où je comprends pas pourquoi ça ne marche pas, parce que var_choix2 ne prend pas la valeur que je lui demande.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CelineZelda Voir le message
    Si j'enlève toutes les commandes attribuer comme tu me le conseilles je retourne au point de départ. Et c'est là où je comprends pas pourquoi ça ne marche pas, parce que var_choix2 ne prend pas la valeur que je lui demande.
    Je suis en train de tracer le problème, un instant, svp...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CelineZelda Voir le message
    Si j'enlève toutes les commandes attribuer comme tu me le conseilles je retourne au point de départ. Et c'est là où je comprends pas pourquoi ça ne marche pas, parce que var_choix2 ne prend pas la valeur que je lui demande.
    OK, c'est bon, j'ai trouvé.

    A chaque fois que vous créez un formulaire, vous appelez une nouvelle fenêtre fenetre = Tk()

    Or Tk() ce n'est pas une fenêtre, c'est l'interpréteur Tcl/Tk qui accessoirement vous fournit une fenêtre principale dans la foulée.

    Multiplier les instances du VM Tk() fait perdre les références objets entre interpréteurs, même si les objets sont déclarés en variables globales.

    C'est dû au mapping mémoire de chaque Tk() (qui passe par un proxy, du coup, chacun son mapping mémoire cloisonné).

    C'est un peu technique - surtout si vous débutez - aussi je ne vais pas me perdre dans des explications interminables.

    Voici ce que vous devriez faire :

    1. la toute première déclaration fenetre = Tk() vous la laissez telle quelle.
    2. pour toutes les autres déclarations, remplacez fenetrexxx = Tk() par fenetrexxx = Toplevel() avec xxx le numéro de votre fenêtre.
    3. au final, dans la totalité de votre fichier, vous ne devriez avoir plus qu'UNE SEULE déclaration fenetre=Tk(), toutes les autres seront fenetre=Toplevel()

    Normalement tout devrait rentrer dans l'ordre, il ne vous restera plus qu'à essayer de respecter le principe de programmation dit DRY (Don't Repeat Yourself - pas de code qui se ressemble qui se répète, pas de redondance de code) + pas mal de remise au propre et ça devrait aller.

    @+.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Par défaut
    Merci beaucoup Tarball
    Ca marche super bien, je te remercie pour ta précieuse aide ! Je vais faire quelques modifications pour que tout soit niquel et ce sera fini

    Bonne soirée à toi.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CelineZelda Voir le message
    Merci beaucoup Tarball
    Ca marche super bien, je te remercie pour ta précieuse aide ! Je vais faire quelques modifications pour que tout soit niquel et ce sera fini

    Bonne soirée à toi.
    Merci de cliquer sur 'Résolu' si votre problème a trouvé réponse.

    Bonne continuation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de valeurs sur les abscisses en subplot
    Par membreComplexe12 dans le forum Général Python
    Réponses: 1
    Dernier message: 12/02/2015, 07h32
  2. Problème de valeur sur un userforme.
    Par a.ouguerzam dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 04/12/2014, 16h27
  3. Problème Combo list sur changement de valeur
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/05/2007, 21h57
  4. Problème de SUM sur une absence de valeur
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/01/2007, 23h33
  5. Réponses: 1
    Dernier message: 25/09/2006, 09h50

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