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 :

[Tkinter] Interface graphique de QCM


Sujet :

Tkinter Python

  1. #41
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut Nouvel essai
    Bon alors voila j'ai fini par faire ca sur vos conseils:

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    # -*- coding: cp1252 -*-
     
    from Tkinter import *
     
    class Question:
        """Classe définissant une question :
            - son énoncé
            - sa réponse 1
            - sa réponse 2
            - sa réponse 3
            - sa réponse juste"""
     
        def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste=""): 
            self.enonce = enonce
            self.rep1 = rep1
            self.rep2 = rep2
            self.rep3 = rep3
            self.repjuste = repjuste
        # end def 
    # end class Question
     
    # création de la fenetre principale pour l'enregistrement de question/réponses 
    Fen1 = Tk()
    # titre donné à la fenêtre
    Fen1.title(u"Création question")
    # création d'un compteur du nombre de questions 
    nb_question = 1 
    # création de la liste qui servira à stocker les questions 
    liste_questions = list()
     
    message_numero_question= stringVar()
    # création d'une étiquette qui indiquera le numéro de la question
    message_numero_question.set(u"Question numéro {}".format(nb_question))
    Label(Fen1,textvariable = message_numero_question,
                              bg="red",
                              fg="white",
                              font="serif 12 bold italic").pack(expand=1, fill=X)
     
     
    #Pour l'énoncé
    Af1=Label(Fen1,text=u"Veuillez entrer l'énoncé de votre question :".pack() #affichage immédiat
    # zone de saisie de l'énoncé
    Ent_enonce = Entry(Fen1) 
    #affichage immédiat avec .pack() 
    Ent_enonce.pack()
     
    #Pour les réponses 
    Af2=Label(Fen1,text=u"Réponse numéro A :").pack()
    Ent_rep1 = Entry(Fen1) 
    Ent_rep1.pack() 
    Af3=Label(Fen1,text=u"Réponse numéro B :").pack()
    Ent_rep2 = Entry(Fen1) 
    Ent_rep2.pack() 
    Af4=Label(Fen1,text=u"Réponse numéro C :").pack() 
    Ent_rep3 = Entry(Fen1)
    Ent_rep3.pack() 
    Af5=Label(Fen1,text=u"Veuillez saisir la lettre de la bonne réponse :").pack()
    Ent_repjuste = Entry(Fen1) 
    Ent_repjuste.pack()
     
    # je récupère les données des zones de saisie 
    def verifier():
        enonce = Ent_enonce.get()
        rep1 = Ent_rep1.get()
        rep2 = Ent_rep2.get()
        rep3 = Ent_rep3.get()
        repjuste = entree_repjuste.get() 
        # formulaire incomplet 
        if enonce=="" or rep1=="" or rep2=="" or rep3=="" or repjuste=="": 
            # masquer le bouton d'enregistrement  
            bouton_enregistrer.pack_forget()
            Af6.configure(text= u"Vous n'avez pas rempli toutes les cases" )
        # tout est rempli:
        else:
            # montrer le bouton d'enregistrement 
            bouton_enregistrer.pack()
        # end if 
    # end def
     
    # Enregistrement des données
    def enregistrer(): 
        global nb_question 
        # enregistrement des questions dans la liste.
        liste_questions.append(Question(enonce = Ent_enonce.get(),
                                        rep1 = Ent_rep1.get(),
                                        rep2 = Ent_rep2.get(),
                                        rep3 = Ent_rep3.get(),
                                        repjuste = Ent_repjuste.get())) 
        # effacement des zones de saisie
        Ent_enonce.delete(0, END)
        Ent_rep1.delete(0, END)
        Ent_rep2.delete(0, END)
        Ent_rep3.delete(0, END)
        Ent_repjuste.delete(0, END)
     
        # je passe à la question suivante
        nb_question += 1
        #mise a jour de l'étiquette 
        message_numero_question.set(u"Question numéro {}".format(nb_question))
     
        # masquer le bouton d'enregistrement
        bouton_enregistrer.pack_forget()
    # end def
     
    #fermeture de la fenêtre
    def fermer():
        enonce = Ent_enonce.get()
        Question.enonce = enonce
        rep1 = Ent_rep1.get()
        Question.rep1 = rep1
        rep2 = Ent_rep2.get()
        Question.rep2 = rep2
        rep3 = Ent_rep3.get()
        Question.rep3 = rep3
        repjuste = Ent_repjuste.get()
        Question.repjuste = repjuste
        print"last question=", Question
        Q = Question(Question.enonce, Question.rep1, Question.rep2, Question.rep3, Question.repjuste)
        liste_Questions.append(Q)
        Fen1.destroy()
    #End def
     
    # création des boutons 
    # bouton 'Vérifier'
    bouton_verifier = Button(Fen1,text=u"Vérifier",command=verifier,) 
    bouton_verifier.pack() 
    # bouton 'Enregistrer' 
    bouton_enregistrer = Button(Fen1,text=u"Enregistrer ma question",command=enregistrer)
    #On ne l'affiche pas immediatement
    # bouton 'Fermer'
    bouton_fermer = Button(Fen1ntext=u"Fermer la fenêtre",command=fermer)
    bouton-fermer.pack()
     
    fenetre.mainloop()
     
    #affiche les questions sauvegardees dans la liste
    for index in range(len(liste_question)):
        print liste_questions[index]
    ce qui ne marche pas est Ent_enonce c'est "une erreur de syntaxe" apparement et sans la resoudre je ne peux pas avancer...

  2. #42
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Copie-colle le message d'erreur complet avec le numéro de ligne.

    Par contre, ceci m'étonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #fermeture de la fenêtre
    def fermer():
        enonce = Ent_enonce.get()
        Question.enonce = enonce  <-- Pourquoi "Question.enonce" ?
    Je te rappelle que Question est le nom d'une classe importée et son attribut enonce n'existe pas si elle n'est pas instanciée.

  3. #43
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut réponse
    c'est juste une fenetre qui s'ouvre ca n'est pas affiché sur idle donc je ne peux pas copier/coller mais c'est surligné en rouge ligne47.


    c'est pour enregistrer dans la classe question dans l'enooncé mais la classe est instanciée ici non ?

  4. #44
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Ta as effectivement une erreur ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Af1=Label(Fen1,text=u"Veuillez entrer l'énoncé de votre question :".pack() #affichage immédiat
    # zone de saisie de l'énoncé
    Ent_enonce = Entry(Fen1)
    Il manque une parenthèse fermante à la première ligne, juste avant .pack()

  5. #45
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par man0n Voir le message
    c'est pour enregistrer dans la classe question dans l'enooncé mais la classe est instanciée ici non ?
    Non, elle n'est pas instanciée dans cette fonction.

    À quoi sert cette fonction ? À fermer l'application, pas à enregistrer une nouvelle question, pour ça tu as déjà une autre fonction.

  6. #46
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut non...
    ce que je voulais c'etait pouvoir fermer la fenetre un fois le nombre questions voules entrées et enregistrées...

  7. #47
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Dans ce cas, à la fin de ta fonction enregistrer(), place une vérification du nombre de questions enregistrées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        # masquer le bouton d'enregistrement
        bouton_enregistrer.pack_forget()
        if nb == 20:
            fermer()

  8. #48
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    ca ne conviendra pas car le bouton enregistrer sert a passer a la question suivante il faudrait plutôt faire apparaître le bouton fermer au bout de 20

  9. #49
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    Il me dit que stringVar() is not definied
    Lol excellent!

    Je te donne un indice : tous les langages de programmation sont sensibles à la casse : ils font la distinction entre majuscules et minuscules dans les noms de classes, d'objets, etc etc.

    Regarde bien le nom de l'objet que j'ai utilisé et trouve ton erreur dans la seconde qui suit

  10. #50
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    ok oui c'est bon ^^ mais c'est Ent_enonce ligne 47 qui marche pas mainteant

  11. #51
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    ok oui c'est bon ^^ mais c'est Ent_enonce ligne 47 qui marche pas mainteant
    Tu peux republier ton code dans l'état actuel, stp ?

    Je vais regarder. Merci.

  12. #52
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    # -*- coding: cp1252 -*-
     
    from Tkinter import *
     
    class Question:
        """Classe définissant une question :
            - son énoncé
            - sa réponse 1
            - sa réponse 2
            - sa réponse 3
            - sa réponse juste"""
     
        def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste=""): 
            self.enonce = enonce
            self.rep1 = rep1
            self.rep2 = rep2
            self.rep3 = rep3
            self.repjuste = repjuste
        # end def 
    # end class Question
     
    #permet d'afficher avec print
    def __str__(self):
        return "enonce=%s ; rep1=%s ; rep2=%s ; rep3=%s ; repJuste=%s" % (self.enonce, self.rep1, self.rep2, self.rep3, self.repjuste)
     
    # création de la fenetre principale pour l'enregistrement de question/réponses 
    Fen1 = Tk()
    # titre donné à la fenêtre
    Fen1.title(u"Création question")
    # création d'un compteur du nombre de questions 
    nb_question = 1 
    # création de la liste qui servira à stocker les questions 
    liste_questions = list()
     
    message_numero_question= StringVar()
    # création d'une étiquette qui indiquera le numéro de la question
    message_numero_question.set(u"Question numéro {}".format(nb_question))
    Label(Fen1,textvariable = message_numero_question,
                              bg="red",
                              fg="white",
                              font="serif 12 bold italic").pack(expand=1, fill=X)
     
     
    #Pour l'énoncé
    Af1=Label(Fen1,text=u"Veuillez entrer l'énoncé de votre question :".pack() #affichage immédiat
    # zone de saisie de l'énoncé
    Ent_enonce = Entry(Fen1) 
    #affichage immédiat avec .pack() 
    Ent_enonce.pack()
     
    #Pour les réponses 
    Af2=Label(Fen1,text=u"Réponse numéro A :").pack()
    Ent_rep1 = Entry(Fen1) 
    Ent_rep1.pack() 
    Af3=Label(Fen1,text=u"Réponse numéro B :").pack()
    Ent_rep2 = Entry(Fen1) 
    Ent_rep2.pack() 
    Af4=Label(Fen1,text=u"Réponse numéro C :").pack() 
    Ent_rep3 = Entry(Fen1)
    Ent_rep3.pack() 
    Af5=Label(Fen1,text=u"Veuillez saisir la lettre de la bonne réponse :").pack()
    Ent_repjuste = Entry(Fen1) 
    Ent_repjuste.pack()
     
    # je récupère les données des zones de saisie 
    def verifier():
        enonce = Ent_enonce.get()
        rep1 = Ent_rep1.get()
        rep2 = Ent_rep2.get()
        rep3 = Ent_rep3.get()
        repjuste = entree_repjuste.get() 
        # formulaire incomplet 
        if enonce=="" or rep1=="" or rep2=="" or rep3=="" or repjuste=="": 
            # masquer le bouton d'enregistrement  
            bouton_enregistrer.pack_forget()
            Af6.configure(text= u"Vous n'avez pas rempli toutes les cases" )
        # tout est rempli:
        else:
            # montrer le bouton d'enregistrement 
            bouton_enregistrer.pack()
        # end if 
    # end def
     
    # Enregistrement des données
    def enregistrer(): 
        global nb_question 
        # enregistrement des questions dans la liste.
        liste_questions.append(Question(enonce = Ent_enonce.get(),
                                        rep1 = Ent_rep1.get(),
                                        rep2 = Ent_rep2.get(),
                                        rep3 = Ent_rep3.get(),
                                        repjuste = Ent_repjuste.get())) 
        # effacement des zones de saisie
        Ent_enonce.delete(0, END)
        Ent_rep1.delete(0, END)
        Ent_rep2.delete(0, END)
        Ent_rep3.delete(0, END)
        Ent_repjuste.delete(0, END)
     
        # je passe à la question suivante
        nb_question += 1
        #mise a jour de l'étiquette 
        message_numero_question.set(u"Question numéro {}".format(nb_question))
     
        # masquer le bouton d'enregistrement
        bouton_enregistrer.pack_forget()
    # end def
     
    #fermeture de la fenêtre
    def fermer():
        enonce = Ent_enonce.get()
        Question.enonce = enonce
        rep1 = Ent_rep1.get()
        Question.rep1 = rep1
        rep2 = Ent_rep2.get()
        Question.rep2 = rep2
        rep3 = Ent_rep3.get()
        Question.rep3 = rep3
        repjuste = Ent_repjuste.get()
        Question.repjuste = repjuste
        print"last question=", Question
        Q = Question(Question.enonce, Question.rep1, Question.rep2, Question.rep3, Question.repjuste)
        liste_Questions.append(Q)
        Fen1.destroy()
    #End def
     
    # création des boutons 
    # bouton 'Vérifier'
    bouton_verifier = Button(Fen1,text=u"Vérifier",command=verifier,) 
    bouton_verifier.pack() 
    # bouton 'Enregistrer' 
    bouton_enregistrer = Button(Fen1,text=u"Enregistrer ma question",command=enregistrer)
    #On ne l'affiche pas immediatement
    # bouton 'Fermer'
    bouton_fermer = Button(Fen1ntext=u"Fermer la fenêtre",command=fermer)
    bouton-fermer.pack()
     
    fenetre.mainloop()
     
    #affiche les questions sauvegardees dans la liste
    for index in range(len(liste_question)):
        print liste_questions[index]

  13. #53
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    ca ne conviendra pas car le bouton enregistrer sert a passer a la question suivante il faudrait plutôt faire apparaître le bouton fermer au bout de 20
    désolé Manon, VinsS a raison.

    D'autant plus que ton raisonnement ne tient pas : si tu arrives à la fin des 20 questions, tu n'as pas besoin de demander l'accord de l'utilisateur pour fermer la fenêtre vu que DE TOUTE FAÇON tu vas fermer la fenêtre.

    Tu saisis la subtilité que VinsS a cherché à te faire comprendre : une fois que l'utilisateur a entré sa 20ème question, tu es d'accord que si cette question est validée, il va bien falloir l'enregistrer.

    Or, comme à la 20ème question tu vas systématiquement fermer la fenêtre, autant le faire dans la foulée immédiatement après avoir ENREGISTRÉ (justement) les données de ta 20ème question.

    Il faut que tu comprennes qu'on raisonne beaucoup dans le déroulement du temps de chaque étape d'un programme.

    D'abord je valide les données, ensuite j'enregistre les données, ensuite je passe à la question suivante en incrémentant le compteur, ensuite j'en profite pour vérifier si j'ai bien atteint mes 20 questions, ensuite si c'est oui, je ferme la fenêtre et si c'est non, je quitte la fonction (ceci se fait implicitement, mais tu dois en avoir conscience) et je retourne dans la grande boucle de Tkinter (la mainloop en fait).

    Je sais bien que tu manques ici d'expérience avec les fonctions pour bien comprendre la temporalité des étapes que tu accomplis, mais c'est important de faire cette gymnastique de l'esprit si tu ne veux pas très vite perdre le fil de ton programme.

  14. #54
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    oui d'accord je comprends cependant je n'ai rien pour fermer la fenetre et je n'ai pas précisé que je voulais que 20 questions ce qui aurait été bien c'est que ca se fasse tout seule apres avoir enregistré la 20eme question c'est possible de faire ca ?

    et pour Ent_enoncé qu'est ce qui cloche ?

  15. #55
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    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
    # -*- coding: cp1252 -*-
     
    from Tkinter import *
     
    class Question:
        """Classe définissant une question :
            - son énoncé
            - sa réponse 1
            - sa réponse 2
            - sa réponse 3
            - sa réponse juste"""
     
    (snip)(snip)
    ...
     fenetre.mainloop()
     
    #affiche les questions sauvegardees dans la liste
    for index in range(len(liste_question)):
        print liste_questions[index]

    Bon alors déjà la classe Question :

    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
    class Question:
        """Classe définissant une question :
            - son énoncé
            - sa réponse 1
            - sa réponse 2
            - sa réponse 3
            - sa réponse juste"""
     
        def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste=""):
            self.enonce = enonce
            self.rep1 = rep1
            self.rep2 = rep2
            self.rep3 = rep3
            self.repjuste = repjuste
        # end def
     
        # permet d'afficher avec print
     
        # note: oui c'est une ruse d'expert ce truc.
        # évite de présenter ça à ton prof, il va hurler!
     
        def __str__(self):
     
            return "enonce=%s ; rep1=%s ; rep2=%s ; rep3=%s ; repJuste=%s" % (self.enonce, self.rep1, self.rep2, self.rep3, self.repjuste)
     
    # le marquage 'end class' sert aussi à ne pas commettre cette erreur:
    # tu as mis ta méthode __str__() EN-DEHORS de la classe !
    # en plus, tu n'as pas fait attention aux tabulations
    # et ça sur Python, ça ne loupe pas.
     
    # end class Question
    J'y arrive à Ent_enonce... un instant...

  16. #56
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par man0n Voir le message
    et pour Ent_enoncé qu'est ce qui cloche ?
    Je te l'ai expliqué dans mon post #44

  17. #57
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    Bon alors déjà la classe Question :

    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
    class Question:
        """Classe définissant une question :
            - son énoncé
            - sa réponse 1
            - sa réponse 2
            - sa réponse 3
            - sa réponse juste"""
     
        def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste=""):
            self.enonce = enonce
            self.rep1 = rep1
            self.rep2 = rep2
            self.rep3 = rep3
            self.repjuste = repjuste
        # end def
     
        # permet d'afficher avec print
     
        # note: oui c'est une ruse d'expert ce truc.
        # évite de présenter ça à ton prof, il va hurler!
     
        def __str__(self):
     
            return "enonce=%s ; rep1=%s ; rep2=%s ; rep3=%s ; repJuste=%s" % (self.enonce, self.rep1, self.rep2, self.rep3, self.repjuste)
     
    # le marquage 'end class' sert aussi à ne pas commettre cette erreur:
    # tu as mis ta méthode __str__() EN-DEHORS de la classe !
    # en plus, tu n'as pas fait attention aux tabulations
    # et ça sur Python, ça ne loupe pas.
     
    # end class Question
    alors j'enleve le truc pour afficher le print ? j'ai trouvé ca sur internet ...

  18. #58
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Je te l'ai expliqué dans mon post #44
    ahhh je n'avais aps vu merci !

    le probleme est la maintenant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "C:\Users\Manon\Documents\Programme Python\enregistrer.py", line 45, in <module>
        Af1=Label(Fen1,text=u"Veuillez entrer l'énoncé de votre question :".pack()) #affichage immédiat
    AttributeError: 'unicode' object has no attribute 'pack'

  19. #59
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    oui d'accord je comprends cependant je n'ai rien pour fermer la fenetre et je n'ai pas précisé que je voulais que 20 questions ce qui aurait été bien c'est que ca se fasse tout seule apres avoir enregistré la 20eme question c'est possible de faire ca ?

    et pour Ent_enoncé qu'est ce qui cloche ?
    Bon alors Ent_enonce :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #Pour l'énoncé
    Af1=Label(Fen1,text=u"Veuillez entrer l'énoncé de votre question :".pack() #affichage immédiat
    # zone de saisie de l'énoncé
    Ent_enonce = Entry(Fen1)
    #affichage immédiat avec .pack()
    Ent_enonce.pack()
    Bon ça, c'est une erreur classique qui tue la mort : l'interpréteur Python te dit qu'il y a une erreur de syntaxe à cet endroit parce que tu as oublié de fermer ta parenthèse dans la déclaration PRÉCÉDENTE i.e.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Af1=Label(Fen1,text=u"Veuillez entrer l'énoncé de votre question :".pack() #affichage immédiat
    C'est un coup à prendre : souvent l'interpréteur va crier à la syntaxe d'erreur pour une erreur qui a commencé EN AMONT tout simplement parce que pour lui les choses deviennent incohérentes uniquement vers cet endroit là.

    En fait, l'erreur se trouve plus haut, il faut donc corriger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Af1=Label(Fen1,text=u"Veuillez entrer l'énoncé de votre question :")
    # en plus tu commets une double erreur : il faut appeler .pack() APRÈS avoir créé ton objet Af1
    # et surtout pas dans la foulée, sinon Af1 = valeur retour de pack() = None
    # ce qui signifie que Af1 = None n'existera pas en réalité.
    # il faut être plus rigoureuse que ça, manon.
    Af1.pack() #affichage immédiat

  20. #60
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    alors j'enleve le truc pour afficher le print ? j'ai trouvé ca sur internet ...
    Personne ne t'a aidée pour ça ? Garde-le, j'espère seulement que ton prof ne va pas te regarder bizarrement...

    Les invasions de lycéennes de l'espace, ça rend parano, paraît-il

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 9 PremièrePremière 1234567 ... DernièreDernière

Discussions similaires

  1. Problème avec mon interface graphique Tkinter
    Par SamirIV dans le forum Tkinter
    Réponses: 0
    Dernier message: 09/05/2014, 21h08
  2. Réponses: 4
    Dernier message: 02/05/2014, 20h23
  3. Interface graphique avec python et tkinter
    Par MrTGR57 dans le forum Tkinter
    Réponses: 0
    Dernier message: 23/04/2014, 17h10
  4. Tkinter interface graphique Toplevel
    Par beber74 dans le forum Tkinter
    Réponses: 3
    Dernier message: 13/04/2013, 10h28
  5. plugin interface graphique
    Par jocelyn dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 13/08/2003, 09h49

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