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. #1
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut [Tkinter] Interface graphique de QCM
    Bonjour tout le monde !
    Alors voila j'ai un projet d'informatique a faire pour le bac car je suis en spécialité informatique seulement j'ai quelques petits soucis que mon prof ne peut résoudre c'est pourquoi je suis ici :)
    alors je souhaite faire un QCM avec une interface graphique sur Tkinter. je joins le programme qui me pose problème dont le problème est justement Q str(k) que l'on retrouve plusieurs fois tout au long du programme.
    Si vous pouviez résoudre ce problème je pourrais continuer à avancer sur mon projet merci d'avance ! :)


    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
    from Tkinter import*     
    Fen1=Tk()               
    Fen1.title(u"Projet Final")
     
     
    Af1=Label(Fen1, text= u"Bonjour, vous allez maintenant pouvoir commencer le jeu de Manon. Etes-vous prêt ?")          #Présentation
    Af2=Label(Fen1, text="")                #Enoncé
    Af3=Label(Fen1, text="")                #Rép1
    Af4=Label(Fen1, text="")                #Rép2
    Af5=Label(Fen1, text="")                #Rép3
    Af6=Label(Fen1, text="Quelle est votre réponse ?")      
    Af7=Label(Fen1, text="")        # On l'utilisisera pour dire bonne ou mauvaise réponse.
    Ent1=Entry(Fen1)            #Le joueur y rentrera sa réponse
     
    n=0             #Compteur du nombre de click sur le bout1
    k=1             #Compteur des questions
    def ma_commande1():
        global n            
        global k            
        n=n+1           # Le compteur de click augmentera à chaque click, ou à chaque fois que la commande est éxecutée !
        if n==1:        # APrès le premier click :
            Af1.configure ( text=u"Veuillez répondre en entrant la lettre correspondant à votre choix.")                
            Bout1.configure(text=u"Ok")
        elif n==2:          # Après le deuxième click le jeu commence. 
            Af1.pack_forget()               #L'affichage 1 ne sera plus utile.
            Af2.pack()                  # On affiche l'énoncé des questions.      
            Af3.pack()
            Af4.pack()
            Af5.pack()
            Af6.pack()
            Ent1.pack()                 # On affiche l'endroit où le joueur rentrera sa réponse        
            Bout1.configure(text=u"Valider ma réponse.")        # Le bouton 1 vérifiera dorénavant la justesse de la réponse
            Af2.configure ( text=u"Question"+str(k)+            # Affichage des réponses. 
                            Q str(k).enonce)                    
            Af3.configure ( text=u"Réponse A :"
                            Q str(k).rep1)
            Af4.configure ( text=u"Réponse B :"
                            Q str(k).rep2)
            Af5.configure ( text=u"Réponse C :"
                            Q str().rep3)
        else:               # A chaque fois que le joueur clickera sur le bouton 1, la réponse du joueur sera vérifiée.
            repjoueur=Ent1.get()        #On enregistre la réponse sous un autre nom qui nous permettra de meux la reconnaitre.
            repjoueur= repjoueur.upper()        # Ce que rentre le joueur est mis en majuscule.
            if repjoueur=Q str(k).repjuste:     
                Af7.pack()
                Af7.configure(text=u"Bonne réponse ! vous pouvez passer la question suivante")
                Bout2.pack()        # LE bouton permettant de passer à la question suivante apparait.
            else :
                Af7.pack()
                Af7.configure(text=u" Mauvaise réponse ! Vous avez répondu "+repjoueur+" alors que la bonne réponse était la "+Q str(k).repjuste+".")     
                Bout2.pack()          
     
    def ma_commande2 ():            # Commande pour paser à la question suivante.
        k=k+1               #On augmente le compteur de question.    
        Ent1.delete(0,END)
        Af2.configure ( text=u"Question"+str(k)+            # On affiche la question suivante.           
                            Q str(k).enonce)
        Af3.configure ( text=u"Réponse A :"
                            Q str(k).rep1)
        Af4.configure ( text=u"Réponse B :"
                            Q str(k).rep2)
        Af5.configure ( text=u"Réponse C :"
                            Q str(k).rep3)      
        Bout2.pack_forget()             #Le bouton disparait
     
     
    Bout1=Button(Fen1,text=u"Oui",command=ma_commande1)
    Bout2=Button(Fen1,text=u"Question Suivante",command=ma_commande2)
     
     
    Af1.pack()
    Af2.pack_forget()
    Af3.pack_forget()
    Af4.pack_forget()
    Af5.pack_forget()
    Af6.pack_forget()
    Ent1.pack_forget()
    Bout1.pack()
    Af7.pack_forget()
    Bout2.pack_forget()
     
    Fen1.mainloop()



    Merci d'avance !!

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Salut,

    Il faut absolument poster ton code entre des balises code, le # dans la barre d'outils d'édition.

    c'est quoi ça:
    ?

    qu'est-ce que "Q" d'une part et d'autre part, à ma connaissance, les str() n'ont pas d'attribut enonce ...

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut réponse
    Bonjour merci d'avoir répondu !

    A quoi servirai le # ?

    Q est la classe Question comme je fais un QCM, .ennonce corresponds a l'ennoncé de la question puisque j'enregistre par Tkinter l'ennoncé les reponse 1 la réponse 2, la réponse 3 et la réponse juste. donc Q str(k).ennonce correspond dans le programme a l'ennoncé d'une question pour ainsi passer seulement la commende a la question suivante.

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    A quoi servirai le # ?
    Lorsque tu édite sur un forum, tu dispose, en général, d'outils d'édition tels que police ou style ou graisse de caratère, mais aussi de la possibilité de caractériser certain block de texte.

    Exemple:

    Je tape un caractère "crochet ouvrant" (celui-la "[") ensuite j'inscris le mot "code" et je termine avec un caractère "crochet sortant" (celui-la "]").

    après quoi je peux faire profiter à la communauté de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print("hello world")
    Ce n'est pas fini !

    Il va encore falloir rajouter un caractère "crochet ouvrant" (celui-la "[") ensuite le mot "/code" et un caractère "crochet sortant" (celui-la "]") pour être tout à fait accepté par cette communauté.



    Q est la classe Question comme je fais un QCM
    Il n'y a aucune classe dans le code que tu nous montre.


    Ceci:
    N'existe pas en Python, en aucune manière. dieu merci.

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut réponses
    ah je ne savais pas mais les modérateurs l'ont fait a ma place

    oui c'est dans un autre programme complémentaire a celui ci qui permets de faire ce que je vous ai expliqué.

    justement je demandais ce qu'il pouvait remplacer cela, c'est ma question de départ.

  6. #6
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Si "Q" est une classe provenant d'un autre script, il faudra l'importer alors et peut-être même l'instancier aussi. Selon le cas.

    Et ça n'explique toujours pas ceci:
    str(k) défini une chaîne de texte dont la valeur est référencée par "k" et lorsque tu y ajoutes .rep1 tu en appelles à un attribut de cette chaîne, ou une méthode dont tu aurais oublié les parenthèses.

    Est-ce que "Q" est une classe contenant les questions et réponses ? Est-ce que "k" est un chiffre ou une clé de dictionnaire ? Est-ce que "rep1" est une clé de dictionnaire ?

    "In the face of ambiguity, refuse the temptation to guess."
    Montre nous la classe Q, du moins son début, que l'on comprenne.

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut réponse
    Voila le programme qui introduit la classe et qui sert a enregistrer les questions est réponses

    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
    lass Question:
        """Classe définissant une liste de 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=""):  # Définition des objetss de la classe
            self.enonce = enonce 
            self.rep1 = rep1
            self.rep2= rep2
            self.rep3 = rep3
            self.repjuste = repjuste
     
     
     
     
    n=1 #compteur du nombre de question
     
     
    # -*- coding: cp1252 -*-
    from Tkinter import*            # On importe Tkinter, on utilisera l'iinerface pour faciliter l'enregistrement de question dans un dictionnaire.
    Fen1=Tk()               #Création de la fênetre, des entrées, etc
    Fen1.title(u"Création question")
     
     
    Af1=Label(Fen1, text= u"Ecrire une question.")
    Af2=Label(Fen1, text="Ecrire la réponse 1.")
    Af3=Label(Fen1, text="Ecrire la réponse 2.")
    Af4=Label(Fen1, text="Ecrire la réponse 3.")
    Af5=Label(Fen1, text="Ecrire la réponse juste.")
    Af6=Label(Fen1, text="")
    Ent1=Entry(Fen1)
    Ent2=Entry(Fen1)
    Ent3=Entry(Fen1)
    Ent4=Entry(Fen1)
    Ent5=Entry(Fen1)
     
    Q1=Question ()   # Pour faciliter l'écriture on renomme la classe
     
    def ma_commande1():             # On crée une commande qui à pour but de vérifier si toutes les entrées possèdent un texte.
        enonce=Ent1.get()               # On renomme les textes entrés pur faciliter l'utilisation de ceux-ci et meiux les reconnaitre.
        rep1=Ent2.get()   
        rep2=Ent3.get()   
        rep3=Ent4.get()   
        repjuste=Ent5.get()    
        if enonce=="" or rep1=="" or rep2=="" or rep3=="" or repjuste=="":              # On intègre une condition permettant de vérifier si les entrées sont vides.
            Bout2.pack_forget ()                                                            # Ainsi le bouton disparaitra.
            Af6.configure(text= u"Vous n'avez pas rempli toutes les cases")                     # On précise le problème à l'utilisateur.
        else:
            Bout2.pack ()           # Si les entrées possédent un texte le bouton apparaitra.
            Af6.configure(text= u"")
     
    def ma_commande2():
        global n        # On intègre le compteur de question à la commande
        enonce=Ent1.get()       # On renomme les textes entrés pur faciliter l'utilisation de ceux-ci et meiux les reconnaitre.
        Q1.enonce= (enonce)         # On enregistre le texte entré dans l'objet correspondant au texte, ici l'objet énoncé, !!!!! dans la classe correspondant à la question. !!!!!! 
        Ent1.delete (0,END)             # On supprime le texte contenue dans l'entrée pour pouvoir entrer un nouveau texte
        rep1=Ent2.get()         #De même
        Q1.rep1=(rep1)          
        Ent2.delete (0,END)
        rep2=Ent3.get()         #De même
        Q1.rep2=(rep2)  
        Ent3.delete (0,END)
        rep3=Ent4.get()         #De même
        Q1.rep3= (rep3)
        Ent4.delete (0,END)
        repjuste=Ent5.get()     #De même
        Q1.repjuste=(repjuste)
        Ent5.delete (0,END)    
        n=n+1                   # Le compteur augmente à chaque fois que l'on appuie sur le bouton.
        Af1.configure(text= u"Ecrire une question "+ str(n)+'.')                         # On met à jour le numéro de la question, de l'énoncé ....
        Af2.configure(text= u"Ecrire la réponse 1, de la question "+ str(n)+'.')
        Af3.configure(text= u"Ecrire la réponse 2, de la question "+ str(n)+'.')
        Af4.configure(text= u"Ecrire la réponse 3, de la question "+ str(n)+'.')
        Af5.configure(text= u"Ecrire la réponse juste, de la question "+ str(n)+'.')
        Bout2.pack_forget ()        # On fait dispaaitre le bouton pour que l'utilsateur ne puisse l'utiliser.
     
    Bout1=Button(Fen1,text=u"Vérifie",command=ma_commande1)                     # Création des boutons
    Bout2=Button(Fen1,text=u"Enregistre les questions ici !",command=ma_commande2)
     
     
    Af1.pack()              # Affichage des différents bidules.
    Ent1.pack()
    Af2.pack()
    Ent2.pack()
    Af3.pack()
    Ent3.pack()
    Af4.pack()
    Ent4.pack()
    Af5.pack()
    Ent5.pack()
    Af6.pack()
    Bout1.pack()
    Bout2.pack_forget()
     
    Fen1.mainloop()
    Vila j'ai tenté de mettre la balise

  8. #8
    Invité
    Invité(e)
    Par défaut Aller de l'avant
    Bonjour Manon,

    Pour ce qui est de ton bac, tu comprendras aisément que personne ne pourra le passer à ta place.

    Tu as un travail de recherches à fournir, c'est pour t'apprendre à NE PAS DÉPENDRE DES AUTRES.

    Ceci dit, on peut toujours t'aiguiller un peu.

    Avant même de commencer la moindre ligne de code, tu dois d'abord te poser un certain nombre de questions :

    1. qu'est-ce que je veux faire PRÉCISÉMENT ?

    Note-le par écrit, n'hésite pas à faire des petits croquis pour avoir les idées plus claires.

    Tu te rendras sans doute compte que tu n'es pas partie dans la bonne direction pour le moment.

    Si vraiment tu n'y arrives pas, je t'expliquerais le raisonnement à suivre.

    2. DE QUOI je dispose pour le faire ?

    Tu as déjà trouvé deux réponses : le langage Python (bravo!) et le framework Tkinter (pratique).

    Il te manque toutefois la réponse à la troisième question :

    3. avant d'appeler au secours, OÙ PUIS-JE ME DOCUMENTER ?

    Google est ton ami.

    Si tu comprends l'anglais - ce que tu as intérêt, si tu te destines à une carrière dans l'informatique - tu trouveras tout ce qu'il te faut ici :

    Fais Ctrl+clic sur les liens hypertextes de ton choix pour les ouvrir dans des nouveaux onglets dans ton navigateur internet, ce sera plus pratique pour toi.

    Les bonnes habitudes à prendre avec Python dès le départ (PEP 8) :

    http://legacy.python.org/dev/peps/pep-0008/

    Documentation officielle Python2.7+ :

    http://docs.python.org/2.7/

    Documentation officielle Python3+ :

    http://docs.python.org/3/

    Documentation officielle Tkinter :

    http://infohost.nmt.edu/tcc/help/pub...web/index.html

    Cases à cocher Checkbutton pour réponses à choix multiples :

    http://infohost.nmt.edu/tcc/help/pub...eckbutton.html

    Bouton radio Radiobutton pour réponse unique parmi plusieurs propositions :

    http://infohost.nmt.edu/tcc/help/pub...diobutton.html

    Utilisation des variables de contrôle de données :

    http://infohost.nmt.edu/tcc/help/pub...variables.html

    Si tu préfères la doc en Français, jette un oeil de ce côté-ci, c'est mon générateur d'interfaces graphiques Tkinter à partir de code XML (facile à comprendre et à utiliser) :

    https://github.com/tarball69/tkRAD/wiki/fr%3Afirst_app

    ou plus généralement :

    https://github.com/tarball69/tkRAD/wiki/Accueil

    À l'avenir, prends quand même l'habitude de fouiller le net à la recherche de documentation (Google est ton ami), AVANT de solliciter la bienveillance d'autrui, tu auras meilleure réputation, crois-moi.

    Allez, courage. On n'append jamais mieux que par soi-même.

    C'est un auto-didacte avec 30 ans de métier qui te le dit.

    Amuse-toi bien !

  9. #9
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    On y voit plus clair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Q1 = Question()   # Pour faciliter l'écriture on renomme la classe
    Non, on ne renomme pas la classe et encore moins pour faciliter son écriture.

    En réalité, tu crées ici une instance de ta classe. Cette instance Q1 possèdent divers attributs (enonce, rep1, rep2, ...) auquels tu auras accès avec Q1.enconce, ce que tu sembles avoir compris.

    Mais tu n'as créé qu'une seule instance de Question alors que l'interface de ton script semble être adaptée à la création de nouvelles questions et ses réponses (ma_commande2()).
    Est-ce normal ?

    Dans ton premier script la fonction ma_commande2() est totalement différente et fait état de plusieurs questions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def ma_commande2 ():
        k=k+1     
        Ent1.delete(0,END)
        Af2.configure ( text=u"Question"+str(k)+ Q str(k).enonce)
        Af3.configure ( text=u"Réponse A :" Q str(k).rep1)
        Af4.configure ( text=u"Réponse B :" Q str(k).rep2)
        Af5.configure ( text=u"Réponse C :" Q str(k).rep3)      
        Bout2.pack_forget()
    Je suppose donc que k est le numéro de la question et que ton intention était construire le nom de l'instance avec Q et k. ... Et ça ne marche pas.

    Pour conserver une suite d'éléments tels que ceux-là il faudra utiliser soit un dictionnaire soit une liste. Comme tu dois utiliser la classe Question alors une liste sera plus adaptée.

    Exemple:
    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
     
    # Création de la liste
    questions = []
     
    def ma_commande2():
        q = Question()
        q.enonce = Ent1.get() 
        q.rep1 = Ent2.get()           
        q.rep2 = Ent3.get() 
        q.rep3 = Ent4.get()
        q.repjuste = Ent5.get()
        # On ajoute à la liste
        questions.append(q)
     
        # On nettoie
        Ent1.delete(0,END)
        Ent2.delete (0,END)
        Ent5.delete (0,END)
        ...
     
    # Variante
    def ma_commande2():
        q = Question(Ent1.get(), Ent2.get(), Ent3.get(), Ent4.get(), Ent5.get())
        questions.append(q)
     
        # On nettoie
        ...
    Ensuite, pour afficher la question choisie et ses propositions de réponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        # k est le numéro de la question
        q = questions[k]
        Af2.configure(text=u"Question %s : %s" % (k, q.enonce)
        Af3.configure(text=u"Réponse A : %s" % q.rep1)
        Af4.configure(text=u"Réponse B : %s" % q.rep2)
        Af5.configure(text=u"Réponse C : %s" % q.rep3)
    Yapluka.



    P.S. si tu veux tu pourras conserver les questions réponses dans un fichier, mais on verra ça après.

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut réposes
    Cher Tarball69,

    Pourquoi les gens sur les forums se sentent-ils toujours obligés de faire la moral...?
    je sais bien que personne n'est la pour le faire a ma place et ej n'ai en aucun cas demandé cela. peut etre si vous aviez lu mon intro vous auriez pu comprendre que je souhaite seulement une petite indication sur quelque chose qui me bloque. Car en effet a présent je me sens obligée de le préciser ce forum est mon dernier recours puisque j'ai déjà demandé a mon meilleur ami Google, passé des heures sur internet afin de résoudre mes petits problèmes or en ce moment je n'ai rien trouvé de bien concluant. De plus mon prof nous a déjà expliqué de mettre sur papier notre objectif et j'ai déjà quelques dizaines de pages concernant mon projet. Ne vous en fait pas pour mon anglais je suis bilingue et j'ai regardé nombre incalculable de video sur tkinter et le langage python; Je me sens aussi obligé de préciser que l'ISN est juste une spé et je ne souhaite en aucun cas en faire mon métier; Maintenant si m'ai der vous pose un problème, me juger ne vous fera que perdre votre temps et je continuerai ma discussion avec VinsS.

    Merci Pour les liens on ne sait jamais et bonne continuation.

  11. #11
    Invité
    Invité(e)
    Par défaut ah les jeunes
    Citation Envoyé par man0n Voir le message
    Cher Tarball69,

    Pourquoi les gens sur les forums se sentent-ils toujours obligés de faire la moral...?
    je sais bien que personne n'est la pour le faire a ma place et ej n'ai en aucun cas demandé cela. peut etre si vous aviez lu mon intro vous auriez pu comprendre que je souhaite seulement une petite indication sur quelque chose qui me bloque. Car en effet a présent je me sens obligée de le préciser ce forum est mon dernier recours puisque j'ai déjà demandé a mon meilleur ami Google, passé des heures sur internet afin de résoudre mes petits problèmes or en ce moment je n'ai rien trouvé de bien concluant. De plus mon prof nous a déjà expliqué de mettre sur papier notre objectif et j'ai déjà quelques dizaines de pages concernant mon projet. Ne vous en fait pas pour mon anglais je suis bilingue et j'ai regardé nombre incalculable de video sur tkinter et le langage python; Je me sens aussi obligé de préciser que l'ISN est juste une spé et je ne souhaite en aucun cas en faire mon métier; Maintenant si m'ai der vous pose un problème, me juger ne vous fera que perdre votre temps et je continuerai ma discussion avec VinsS.

    Merci Pour les liens on ne sait jamais et bonne continuation.
    Manon,

    Je ne te fais pas la morale : je t'incite à aller de l'avant.

    Mais bon, fais comme tu veux.

    @+ tarball69.

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut réponse
    Oui c'est cela ! je dois créer plusieurs question pour faire mon QCM mais je n'avais pas compris que je devais créer plusieurs instances pour cela. Ce qui risque d'etre long si je créer 20 questions ?!

    K est en effet le numero de ma question puisque grace a lui je pourrais passer a la question suivante selon les commandes.

    Je ne comprends pas bien la troisieme fenetre de code et dans la quatrieme les % sont ils présents par choix ??

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut réponses
    Tarball69, je pense que vous ne connaissais pas le nombre d'heures que j'ai passé sur ce projet et sur les recherches afin de parvenir au point ou j'en suis, une aide sur un endroit ou je bloque ne remets pas en cause mon avancée mais il est difficile de faire un programme comme celui seule alors que je ne suis sur python que depuis 6mois et que j'ai déjà dépassé mon professeur. Mais comme vous pouvez le voir d'autres sont aptes a me répondre gentillement.

    Merci quand meme de votre intention.

  14. #14
    Invité
    Invité(e)
    Par défaut Bisounours
    Citation Envoyé par man0n Voir le message
    Tarball69, je pense que vous ne connaissais pas le nombre d'heures que j'ai passé sur ce projet et sur les recherches afin de parvenir au point ou j'en suis, une aide sur un endroit ou je bloque ne remets pas en cause mon avancée mais il est difficile de faire un programme comme celui seule alors que je ne suis sur python que depuis 6mois et que j'ai déjà dépassé mon professeur. Mais comme vous pouvez le voir d'autres sont aptes a me répondre gentillement.

    Merci quand meme de votre intention.
    De rien, rame bien. @+

  15. #15
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Citation Envoyé par man0n Voir le message
    Oui c'est cela ! je dois créer plusieurs question pour faire mon QCM mais je n'avais pas compris que je devais créer plusieurs instances pour cela. Ce qui risque d'etre long si je créer 20 questions ?!
    Ce qui prend tu temps c'est d'encoder les questions réponses, le reste ce sont des électrons qui se balladent et, crois moi, ça, ça va très vite.

    K est en effet le numero de ma question puisque grace a lui je pourrais passer a la question suivante selon les commandes.
    Alors c'est bon, crée tes question dans une boucle par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for i in range(20):
        macommande2()
    Voilà, c'est fait !

    Je ne comprends pas bien la troisieme fenetre de code
    Il s'agit de deux variantes de code qui font la même chose.

    - Créer une instance de Question
    - Affecter les bonnes valeurs aux attributs de q
    - Ajouter cette instance à la liste des questions.

    et dans la quatrieme les % sont ils présents par choix ??
    Il s'agit de formatage de string, plus élégant que "+", voir ici les nombreuses possibilités de ce type de formatage:
    http://docs.python.org/2/library/std...ing-formatting

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut réponse
    Alors je rentre plus mes questions par Tkinter ?

    Je vais essayer pour les reste et je mettrai le programme sur le forum des que ca ressemblera a quelque chose

    Je vais aussi m'interresser a votre site !

    Enregistrer les questions dans un dossier m'interresse aussi grandement ca pourrait etre super si elles sont réutilisables !

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut instances
    j'ai cru comprendre en regardant sur internet que les instances se définissaient par _init_ (oui je n'ai jamais entendu parler de celapuisque mon prof n'a pas voulu nous faire de cours sur les classes il ne sait pas comment ca marche je crois) donc dans le programme j'vais fais ca

    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
    class Question:
        """Classe définissant une liste de 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=""):  # Définition des objets de la classe
            self.enonce = enonce 
            self.rep1 = rep1
            self.rep2= rep2
            self.rep3 = rep3
            self.repjuste = repjuste
    est ce que ca veut dire que je dois en faire 20 ou alors je dois en crer une pour l'ennoncé, une pour la rep 1, une pour la rep2, une pour la rep3 et une pour la repjuste ?

    je suis désolée d'etre longue a comprendre mais je n'ai vraiment pas beaucoup d'experience je faias avec ce que je trouve sur internet et sur les forums... Merci de votre patience VinsS !

  18. #18
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Non, une seule instance par question.

    Tu peux donner les arguments directement à l'instanciation grâce à __init__()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        q = Question(Ent1.get(), Ent2.get(), Ent3.get(), Ent4.get(), Ent5.get())
    ou bien après coup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        q = Question()
        q.enonce = Ent1.get() 
        q.rep1 = Ent2.get()           
        q.rep2 = Ent3.get()
        etc.

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut réponse
    ah c'est juste ca ?! comme pour la liste alors ! et je dois le faire 20 fois ?

  20. #20
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    j'ai cru comprendre en regardant sur internet que les instances se définissaient par _init_ (oui je n'ai jamais entendu parler de celapuisque mon prof n'a pas voulu nous faire de cours sur les classes il ne sait pas comment ca marche je crois) donc dans le programme j'vais fais ca

    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
    class Question:
        """Classe définissant une liste de 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=""):  # Définition des objets de la classe
            self.enonce = enonce 
            self.rep1 = rep1
            self.rep2= rep2
            self.rep3 = rep3
            self.repjuste = repjuste
    est ce que ca veut dire que je dois en faire 20 ou alors je dois en crer une pour l'ennoncé, une pour la rep 1, une pour la rep2, une pour la rep3 et une pour la repjuste ?

    je suis désolée d'etre longue a comprendre mais je n'ai vraiment pas beaucoup d'experience je faias avec ce que je trouve sur internet et sur les forums... Merci de votre patience VinsS !
    Pour faire simple (mais vraiment simple) une classe, c'est un paquet dans lequel tu vas mettre des bijoux (des propriétés, des membres) et des comportements (des méthodes).

    L'intérêt d'une classe est justement d'empaqueter une structure de données en fonction de son utilité.

    Par exemple, la classe Voiture sera une structure qui encapsulera une propriété 'couleur' (rouge, vert, bleu) et un comportement, une méthode 'rouler()'.

    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
     
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    class Voiture:
        r"""
            ici la classe représente un paquet dans lequel
            on met des propriétés (couleur, etc)
            et des méthodes (comportement, rouler(), etc)
        """
     
        def __init__ (self, color):
            r"""
                la méthode __init__ est aussi appelée
                constructeur de classe
            """
     
            # je stocke la couleur de ma voiture
            # dans le membre 'couleur' de ma classe
            # note ici que 'color' est lui
            # un ARGUMENT DE FONCTION, un paramètre
     
            self.couleur = color
     
        # end def
     
        def rouler (self):
            r"""
                on définit ici le comportement
                rouler() une seule fois pour
                toutes les instances de la classe
            """
     
            # ici le comportement se résume à afficher
            # un petit texte dans la console
     
            print("Roulez, jeunesse !")
     
        # end def
     
    # end class Voiture
    Lorsque tu crées une instance d'une classe dans un objet, tu crées en réalité une COPIE personnelle des membres de ta classe dans cet objet, MAIS PAS de copie des comportements, des méthodes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    # l'objet 'ma_voiture' récupère une copie personnalisée (instance)
    # de la classe Voiture avec la propriété (le membre de classe) self.couleur = "rouge"
     
    ma_voiture = Voiture("rouge")
    En appelant "Voiture('rouge')" tu appelles en réalité le constructeur de classe, c'est-à-dire chez Python, la méthode "Voiture.__init__(ma_voiture, 'rouge')" de manière totalement transparente.

    Le fameux pointeur "self" que tu vois un peu partout dans du code Python est une référence à l'instance de la classe, c'est-à-dire, au final, à l'objet que tu es en train de créer, ici dans notre exemple, l'objet 'ma_voiture'.

    L'objet 'ma_voiture' se référera aux méthodes déclarées une fois pour toutes dans ta classe 'Voiture' : du coup, c'est une grosse économie de mémoire.

    Ce qui est personnalisable sera recopié dans ton objet, en revanche un comportement étant toujours le même quel que soit ton objet, on se contente de tirer un simple lien de référence vers ce comportement, cette méthode, directement dans la classe.

    Pour résumer, tu crées une capsule 'Voiture' dans laquelle tu mets une propriété 'couleur' (membre de classe) et dans laquelle tu mets un comportement, la méthode 'rouler()'.

    Note aussi qu'on appelle 'méthode' une fonction lorsque celle-ci appartient à une classe, qu'on appelle 'procédure' une fonction qui ne retourne aucune valeur (void) et qu'on appelle enfin 'fonction' une fontion qui retourne une valeur.

    En fait, 'méthode', 'procédure' et 'fonction' sont toutes des fonctions, on les distingue simplement en fonction de leur place dans le programme.

    Je ne veux pas te bourrer le crâne, mais on appelle aussi 'membre de classe' les variables qui stockent des objets ou des valeurs dans la classe, comme la 'couleur' de 'Voiture', par exemple, qui stocke un objet chaîne de caractères.

    On appelle aussi 'propriété' un membre de classe qui peut gérer sa valorisation (c'est entre la variable simple et la méthode de classe) en acceptant ou en refusant certaines valeurs, par exemple.

    Pour finir, on appelle 'attributs' l'ensemble des 'propriétés', 'membres' et 'méthodes' d'une même classe.

    Ouf, je crois que j'ai tout résumé, là.

    Amuse-toi bien.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 9 12345 ... 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