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 :

Liste en série / liste randomisée


Sujet :

Tkinter Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut Liste en série / liste randomisée
    Bonjour à tous,

    Je souhaite développer un script qui puisse réaliser ce qui suit :

    Présentation d’une série de textes dans un ordre bien défini avec pour chacun des textes 5 questions différentes à présenter dans un ordre aléatoire.

    Je précise :
    Affichage d’un texte1 (frame supérieur) puis affichage de 5 questions (frame inférieur) dans un ordre aléatoire sans remise. Chaque texte doit rester à l’écran tant que les 5 questions n’ont pas été posées.
    Affichage d’un texte 2 avec 5 autres questions
    Affichage d’un texte 3 avec 5 autres questions etc etc

    Je voudrais faire apparaître et disparaître les textes et les questions avec des Buttons

    Le script ci-dessous vous donnera un aperçu mais qui est loin d’être au top !!!

    Merci d’avance pour votre aide.



    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
    #! /usr/bin/env python
    # -*- coding: cp1252 -*-
     
    from Tkinter import *
    from random import randrange
     
     
    liste1=["texte1","texte2","texte3","texte4","texte5","texte6","texte7","texte8","texte9","texte10"]
    questions1=["question11","question12","question13","question14","question15"]
    questions2=["question21","question22","question23","question24","question25"]
    #questions3
    #questions4
    #.........
    #......
     
    fen1 = Tk()
    fen1.configure(bg='white')
    fen1.title("PIA")
    larg,haut=fen1.winfo_screenwidth(),fen1.winfo_screenheight()
    fen1.overrideredirect(1)
    fen1.geometry("%dx%d+0+0"%(larg,haut))
    cadre=Frame(fen1, bg='white',width=2000, height=2000)
    cadre.place(x=160, y=120)	
    cadre2=Frame(fen1, bg='white',width=1000, height= 300, relief=RIDGE)
    cadre2.place(x=160, y=600)
     
    def L1():
        a=0
        while (a<9):
            a=a+1
        for texte in liste1:
            Message(cadre, text=liste1[a], bg='white',font='Colibri 35', justify='left', width=1000).pack()
     
     
    def QL11():
        #cadre.destroy()
        a=0
        while (a<5):
            a=a+1
            r=randrange(5)
        Message(cadre2, text=questions[r], bg='white',font='Colibri 35 bold', justify='left', width=1000).pack()    
     
     
     
     
    Button(fen1,text='Phrases',command=L1, bg='grey').place(x=30, y=700)
    Button(fen1,text='Questions',command=QL11, bg='grey').place(x=30, y=750)
    Button(fen1,text='Quitter',command=fen1.destroy, bg='grey').place(x=30, y=800)
     
     
    fen1.mainloop()

  2. #2
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    EDIT : je viens de m'apercevoir que tu avais ouvert plusieurs sujet sur la question, ce qui suit te seras sans doute inutile.

    J'ai pas bien compris.
    tu affiche texte 1, puis les 5 question associées, tirées dans un ordre aléatoire dans questions1[].
    Puis tu affiche texte2 en dessous de texte 1 et tu écrases les questions précédente avec celles de questions2[]?
    Ou alors tu efface aussi texte 1 pour mettre texte 2?

    Quoi qu'il en soit :

    1) tu devrais plutôt demander conseil pour les points précis qui te pose problème, pour qu'on puisse t'aider.
    2) dans ton code actuel :
    2.1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        a=0
        while (a<9):
            a=a+1
        for texte in liste1:
            Message(cadre, text=liste1[a], bg='white',font='Colibri 35', justify='left', width=1000).pack()
    Ca ça m'étonnerait que ça fasse ce que tu attends :
    Tu initialise ton a à 0, puis tu l'incrémente jusqu'à ce qu'il vaille 9, et une fois qu'il vaut 9 tu décide d'afficher liste1[a], c'est à dire texte10 autant de fois que tu as d'élément dans ta liste.

    Si tu veux afficher 1 fois chaque éléments de ta liste une seule boucle suffis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for texte in liste1:
       Message(cadre, text=liste1[texte], bg='white',font='Colibri 35', justify='left', width=1000).pack()
    Quoi que tu veuille réellement faire ton while ne sert à rien, autant directement écrire a = 9 ...

    2.2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Message(cadre2, text=questions[r], bg='white',font='Colibri 35 bold', justify='left', width=1000).pack()
    La liste questions n'existe pas (tu as questions1 et questions2), donc forcement si tu clique sur le bouton "Questions" tu auras une erreur (bien méritée )

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    Bonjour Gaillac,

    Je vais tenter de mieux m'expliquer :
    Le texte 1 s'affiche et reste affiché tant que les 5 questions n'ont pas été posées (Button questions). Chaque question posée écrase la précédente.
    Une fois les 5 questions posées pour le texte 1, le texte 2 s'affiche (Button textes) écrase le précédent puis les 5 questions portant sur le texte 2 sont posées, et ainsi de suite.
    Voilà, j'espère avoir été plus clair.

    Merci d'avance

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    j'ai oublié de modifier la liste questions1, voici le code corrigé :
    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
    #! /usr/bin/env python
    # -*- coding: cp1252 -*-
     
    from Tkinter import *
    from random import randrange
     
     
    liste1=["texte1","texte2","texte3","texte4","texte5","texte6","texte7","texte8","texte9","texte10"]
    questions1=["question11","question12","question13","question14","question15"]
    questions2=["question21","question22","question23","question24","question25"]
    #questions3
    #questions4
    #.........
    #......
     
    fen1 = Tk()
    fen1.configure(bg='white')
    fen1.title("PIA")
    larg,haut=fen1.winfo_screenwidth(),fen1.winfo_screenheight()
    fen1.overrideredirect(1)
    fen1.geometry("%dx%d+0+0"%(larg,haut))
    cadre=Frame(fen1, bg='white',width=2000, height=2000)
    cadre.place(x=160, y=120)	
    cadre2=Frame(fen1, bg='white',width=1000, height= 300, relief=RIDGE)
    cadre2.place(x=160, y=600)
     
    def L1():
        a=0
        while (a<9):
            a=a+1
        for texte in liste1:
            Message(cadre, text=liste1[a], bg='white',font='Colibri 35', justify='left', width=1000).pack()
     
     
    def QL11():
        #cadre.destroy()
        a=0
        while (a<5):
            a=a+1
            r=randrange(5)
        Message(cadre2, text=questions1[r], bg='white',font='Colibri 35 bold', justify='left', width=1000).pack()    
     
     
     
     
    Button(fen1,text='Phrases',command=L1, bg='grey').place(x=30, y=700)
    Button(fen1,text='Questions',command=QL11, bg='grey').place(x=30, y=750)
    Button(fen1,text='Quitter',command=fen1.destroy, bg='grey').place(x=30, y=800)
     
     
    fen1.mainloop()

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    J'ai avancé en petit peu en regroupant diverses infos :
    Voici mon nouveau code çà sera encore plus clair :
    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
    #! /usr/bin/env python
    # -*- coding: cp1252 -*-
     
    from Tkinter import *
    from random import randrange
     
     
    liste1=["texte1","texte2","texte3","texte4","texte5","texte6","texte7","texte8","texte9","texte10"]
    questions1=["question11","question12","question13","question14","question15"]
    questions2=["question21","question22","question23","question24","question25"]
    #questions3
    #questions4
    #.........
    #......
     
    fen1 = Tk()
    fen1.configure(bg='white')
    fen1.title("PIA")
    larg,haut=fen1.winfo_screenwidth(),fen1.winfo_screenheight()
    fen1.overrideredirect(1)
    fen1.geometry("%dx%d+0+0"%(larg,haut))
    cadre=Frame(fen1, bg='white',width=2000, height=2000)
    cadre.place(x=160, y=120)	
    cadre2=Frame(fen1, bg='white',width=1000, height= 300, relief=RIDGE)
    cadre2.place(x=160, y=600)
     
    def L1():
        Message(cadre, text=liste1[0], bg='white',font='Colibri 35', justify='left', width=1000).pack()
     
    def QL11() : 
        for j in range(5):
            a=randrange(len(questions1))
            cadre2=Frame(fen1, width=2000, height=2000)
            cadre2.place(x=160, y=700)	
            Message(cadre2, text=questions1[a], bg='white',font='Colibri 35', justify='left', width=1000).pack()
     
     
     
    Button(fen1,text='Textes',command=L1, bg='grey').place(x=30, y=700)
    Button(fen1,text='Questions',command=QL11, bg='grey').place(x=30, y=750)
    Button(fen1,text='Quitter',command=fen1.destroy, bg='grey').place(x=30, y=800)
     
     
    fen1.mainloop()
    Mon gros souci est que je n'arrive pas à faire en sorte qu'en appuyant sur le Button "Textes" il passe au suivant tout en écrasant le précédent et tout en effaçant la dernière question...
    C'est un peu plus clair???

  6. #6
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    Première remarque : je ne vois pas l'intéret de faire 2 boutons, puisuqe tout est séquencielle :
    Tu affiche le texte, puis tes questions, puis le nouveaux texte, puis les nouvelle question.
    Tu ne peux pas changer de texte tant que les 5 questions n'ont pas défilées, et une fois que tu as eu les 5 questions tu es obligé de changer le texte.
    Donc un seul bouton suffis, non?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    salut Gaillac,
    chaque question apparaissant une à une (avec écrasement) je pense qu'il faut deux boutons

  8. #8
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    Code python : 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
    #! /usr/bin/env python
    # -*- coding: cp1252 -*-
     
    from Tkinter import *
    from random import randrange
     
     
    liste1=["texte1","texte2","texte3","texte4","texte5","texte6","texte7","texte8","texte9","texte10"]
    questions1=["question11","question12","question13","question14","question15"]
    questions2=["question21","question22","question23","question24","question25"]
    #questions3
    #questions4
    #.........
    #......
     
    fen1 = Tk()
    fen1.configure(bg='white')
    fen1.title("PIA")
    larg,haut=fen1.winfo_screenwidth(),fen1.winfo_screenheight()
    fen1.overrideredirect(1)
    fen1.geometry("%dx%d+0+0"%(larg,haut))
    cadre=Frame(fen1, bg='white',width=2000, height=2000)
    cadre.place(x=160, y=120)	
    cadre2=Frame(fen1, bg='white',width=1000, height= 300, relief=RIDGE)
    cadre2.place(x=160, y=600)
    compteur_texte = IntVar()
    compteur_texte.set(0)
    str_texte=StringVar() 
    msg_texte = Message(cadre, textvariable=str_texte, bg='white',font='Colibri 35', justify='left', width=1000).pack()
                     
     
    def L1():
        #Message(cadre, text=liste1[0], bg='white',font='Colibri 35', justify='left', width=1000).pack()
        str_texte.set(liste1[compteur_texte.get()])
        compteur_texte.set(compteur_texte.get()+1)
            
    def QL11() : 
        for j in range(5):
            a=randrange(len(questions1))
            cadre2=Frame(fen1, width=2000, height=2000)
            cadre2.place(x=160, y=700)	
            Message(cadre2, text=questions1[a], bg='white',font='Colibri 35', justify='left', width=1000).pack()
            
     
     
    Button(fen1,text='Textes',command=L1, bg='grey').place(x=30, y=700)
    Button(fen1,text='Questions',command=QL11, bg='grey').place(x=30, y=750)
    Button(fen1,text='Quitter',command=fen1.destroy, bg='grey').place(x=30, y=800)
     
     
    fen1.mainloop()
    La méthode Pack empile les objets.
    dans ce que tu faisais, tu recréais un nouveau message et tu le packais, donc ta méthode pack l'empilait sous le précédent.
    Si tu avais utilisé la méthode grid plutôt que pack, tu aurais pu ré-écrire par dessus.
    mais c'est moche.

    Plutôt que de recréer on message à chaque fois, il vaut mieux le créer une bonne fois pour toute et n'utiliser ta procédure que pour mettre à jour le texte (en utilisant "textvariable" au lieu de "text").

    Pour donner une valeur à ce "textvariable" il faut déclarer une variable.
    De même pour le compteur qui te permettra d'incrémenter l'indice de ton tableau "liste1".
    Si tu et contente de faire compteur_texte = 0, tu ne pourras plus modifier sa valeur plus tard (et donc l'incrémenter), Python figera sa valeur à la valeur donnée.
    Pire, tu ne pourras même pas l'utiliser dans ta procédure parce qu'il la considérera comme local à l'endroit où tu la déclare. pour l'utiliser il faudrait (au début de ta procédure) écrire "global compteur_texte", mais les variables globales, c'est le mal.
    (D'ailleurs, si ton application grossis un peu, il va vite falloir abandonner le système du "je mets tout tel quel dans mon fichier" et organiser un peu ton code, faire des classes par exemple )

    Sur le compteur en lui même, pas grand chose à rajouter si ce n'est que pour toucher à une variable qui n'est pas locale à ta procédure tu ne peux pas utiliser les opérateur "=" ou "+" mais il faut faire des set() et des get().

    Si j'ai laissé des zones d'ombres, n'hésite pas à demander.
    Avec ça, texte ressemble à ce que j'ai compris que tu voulais.

    Utilise un deuxième compteur pour compter tes réponses (puis le remettre à 0), et je ne vois toujours pas l'utilité de deux boutons (et je et le prouve dès que j'ai le temps!)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    génial!

    un grand merci Gaillac... c'est exactement ce que je voulais...
    je ne vois pas trop comment faire avec un seul bouton étant donné que les questions doivent s'afficher une à une tout en laissant le temps au participant de répondre à celles-ci.
    je ne ferme pas la discut, je risque d'avoir d'autres questions... (car en fait j'ai plusieurs liste de textes....)
    tu as raison, il faut que je me mette aux Class mais pour l'instant je capte pas grand chose
    a +

  10. #10
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    Voilà avec un seul bouton ce que j'ai compris que tu voulais (mais je me suis peut être planté).
    j'ai légèrement changé la façon de gérer les différentes listes de questions parce que je préfère manipuler un tableau bidimensionnel que 10 tableaux monodimensionnel, mais tu fais ce que tu veux.

    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
     
    #! /usr/bin/env python
    # -*- coding: cp1252 -*-
     
    from Tkinter import *
    from random import randrange
     
     
    liste1=["texte1","texte2","texte3","texte4","texte5","texte6","texte7","texte8","texte9","texte10"]
    questions=len(liste1)*[0]
    for i in range(len(liste1)):
        questions[i]=["question"+str(i+1)+"1","question"+str(i+1)+"2","question"+str(i+1)+"3","question"+str(i+1)+"4","question"+str(i+1)+"5"]
     
    #questions1=["question11","question12","question13","question14","question15"]
    #questions2=["question21","question22","question23","question24","question25"]
    #questions3
    #questions4
    #.........
    #......
     
    fen1 = Tk()
    fen1.configure(bg='white')
    fen1.title("PIA")
    larg,haut=fen1.winfo_screenwidth(),fen1.winfo_screenheight()
    fen1.overrideredirect(1)
    fen1.geometry("%dx%d+0+0"%(larg,haut))
    cadre=Frame(fen1, bg='white',width=2000, height=2000)
    cadre.place(x=160, y=120)	
    cadre2=Frame(fen1, bg='white',width=1000, height= 300, relief=RIDGE)
    cadre2.place(x=160, y=600)
    compteur = IntVar()
    compteur.set(0)
    str_texte=StringVar()
    str_quest=StringVar()
    msg_texte = Message(cadre, textvariable=str_texte, bg='white',font='Colibri 35', justify='left', width=1000).pack()
    msg_quest = Message(cadre2, textvariable=str_quest, bg='white',font='Colibri 35', justify='left', width=1000).pack()
     
     
    def L1():
        if(compteur.get()%6 == 0):
          if(compteur.get()/6 < len(liste1)):
            str_texte.set(liste1[compteur.get()/6])
          else:
            str_texte.set("Fin des questions!")
            str_quest.set("")
        else:
          if(compteur.get()/6 < len(liste1)):  
            num_texte = compteur.get()/6
            a=randrange(len(questions[num_texte]))
            str_quest.set(questions[num_texte][a])
            del questions[num_texte][a]
     
        compteur.set(compteur.get()+1)
     
     
     
     
     
    Button(fen1,text='Textes',command=L1, bg='grey').place(x=30, y=700)
    #Button(fen1,text='Questions',command=QL11, bg='grey').place(x=30, y=750)
    Button(fen1,text='Quitter',command=fen1.destroy, bg='grey').place(x=30, y=800)
     
     
    fen1.mainloop()

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    J'apprend plein de trucs encore merci Gaillac, effectivement avec un bouton çà fonctionne!
    Mais le problème est que les questions sont différentes pour chaque texte!!
    Il va falloir faire que je fasse plusieurs listes de questions non?

  12. #12
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    C'est sur que rien ne peut automatiser tes questions.

    ce que j'ai fait,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    liste1=["texte1","texte2","texte3","texte4","texte5","texte6","texte7","texte8","texte9","texte10"]
    questions=len(liste1)*[0]
    for i in range(len(liste1)):
        questions[i]=["question"+str(i+1)+"1","question"+str(i+1)+"2","question"+str(i+1)+"3","question"+str(i+1)+"4","question"+str(i+1)+"5"]
    c'est juste un raccourci pratique pour avoir 50 questions numérotées.
    Toi ça sera beaucoup plus gros, t'es interdit de boucles!!
    Mais le principe reste le même, sauf que tu es obligé de tout faire à plat
    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
     
    liste1=["texte1","texte2","texte3","texte4","texte5","texte6","texte7","texte8","texte9","texte10"]
    questions=len(liste1)*[0]
    #Questions du texte 1
        questions[i]=["En 2010, la première plage réfrigérée au monde devrait voir le jour à...",
                           "En Serbie, deux lionceaux viennent de naître au zoo de Belgrade, ils vont ainsi permettre de renforcer les effectifs de l'espèce menacée des lions...",
                            "Parmi ces espèces de tigres, laquelle est définitivement éteinte ?",
                            "L'Agence de protection américaine de l'environnement s'apprête à publier une liste d'individus recherchés pour leurs...",
                            "Récemment, dans quel pays européen des analyses ont montré une contamination à la dixione de certains élevages de porcs et de bovins ?"]
    #Questions du texte 2
        questions[i]=["Mardi dernier, la France a été condamnée à une amende de 10 millions d'euros pour avoir tardé à appliquer une loi européenne...",
                          "Dans l'Union européenne, en quelle année la commercialisation des ampoules traditionnelles sera interdite au profit des ampoules basse consommation ?",
                          "Hier, 57 écologistes ont été arrêtés après avoir paralysé l'aéroport londonien de...",
                          "Selon un sondage publié par les Ateliers de la Terre, quel pourcentage des français considèrent que la réduction du nombre des espèces animales et végétales met en danger la survie de l'homme ?",
                          "Hier avait lieu la Journée mondiale d'action contre..."]
    #Questions du texte 3
    ...
    A noter que les question données en exemple sont les 10 dernières de http://www.greenquizz.com et n'ont souvent aucun sens sans les 4 propositions qui vont avec, c'est juste pour l'exemple (j'avais la flemme d'inventer des questions).

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    salut Gaillac,

    j'avance dans mon programme, j'ai fait une page d'acceuil permettant le choix des listes, tu le verras dans le code qui suit je n'ai fait que la liste 1 et 2 du premier libellé.
    mon premier problème est que ni les textes ni les questions s'affichent

    je cherche, je cherche...

    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
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    # -*- coding: cp1252 -*-
     
    #! /usr/bin/env python
    # -*- coding: cp1252 -*-
     
    from Tkinter import *
    from random import randrange
     
     
    fen = Tk()
    fen.configure(bg='grey')
    fen.title("PIA")
    larg,haut=fen.winfo_screenwidth(),fen.winfo_screenheight()
    fen.overrideredirect(1)
    fen.geometry("%dx%d+0+0"%(larg,haut))
     
     
    def L1():
        liste1=["texte11","texte12","texte13","texte14","texte15","texte16","texte17","texte18","texte19","texte110"]
        questions=len(liste1)*[0]
        for i in range(len(liste1)):
            questions[i]=["question111","question211","question311","question411","question511"]
            #questions[i]=["question112","question212","question312","question412","question512"]
            #questions[i]=["question113","question213","question313","question413","question513"]
            #questions[i]=["question114","question214","question314","question414","question514"]
            #questions[i]=["question115","question215","question315","question415","question515"]
            #questions[i]=["question116","question216","question316","question416","question516"]
            #questions[i]=["question117","question217","question317","question417","question517"]
            #questions[i]=["question118","question218","question318","question418","question518"]
            #questions[i]=["question119","question219","question319","question419","question519"]
            #questions[i]=["question110","question2110","question3110","question4110","question5110"]
     
        fen = Tk()
        fen.configure(bg='white')
        fen.title("PIA")
        larg,haut=fen.winfo_screenwidth(),fen.winfo_screenheight()
        fen.overrideredirect(1)
        fen.geometry("%dx%d+0+0"%(larg,haut))
        cadre=Frame(fen, bg='white',width=2000, height=2000)
        cadre.place(x=160, y=120)	
        cadre2=Frame(fen, bg='white',width=1000, height= 300, relief=RIDGE)
        cadre2.place(x=160, y=600)
        compteur = IntVar()
        compteur.set(0)
        str_texte=StringVar()
        str_quest=StringVar()
        msg_texte = Message(cadre, textvariable=str_texte, bg='white',font='Colibri 35', justify='left', width=1000).pack()
        msg_quest = Message(cadre2, textvariable=str_quest, bg='white',font='Colibri 35', justify='left', width=1000).pack()
     
        def go():
            if(compteur.get()%6 == 0):
              if(compteur.get()/6 < len(liste1)):
                str_texte.set(liste1[compteur.get()/6])
              else:
                str_texte.set("Fin des questions!")
                str_quest.set("")
            else:
              if(compteur.get()/6 < len(liste1)):  
                num_texte = compteur.get()/6
                a=randrange(len(questions[num_texte]))
                str_quest.set(questions[num_texte][a])
                del questions[num_texte][a]
     
            compteur.set(compteur.get()+1)
     
     
        Button(fen,text='>>>',command=go, bg='grey').place(x=30, y=850)
        Button(fen,text='Quitter',command=fen.destroy, bg='grey').place(x=30, y=900)
     
     
        fen.mainloop()
     
     
    def L2():
        liste2=["texte21","texte22","texte23","texte24","texte25","texte26","texte27","texte28","texte29","texte210"]
        questions=len(liste2)*[0]
        for i in range(len(liste2)):
            questions[i]=["question121","question221","question321","question421","question521"]
            #questions[i]=["question122","question222","question322","question422","question522"]
            #questions[i]=["question123","question223","question323","question423","question523"]
            #questions[i]=["question124","question224","question324","question424","question524"]
            #questions[i]=["question125","question225","question325","question425","question525"]
            #questions[i]=["question126","question226","question326","question426","question526"]
            #questions[i]=["question127","question227","question327","question427","question527"]
            #questions[i]=["question128","question228","question328","question428","question528"]
            #questions[i]=["question129","question229","question329","question429","question529"]
            #questions[i]=["question1210","question2210","question3210","question4210","question5210"]
     
        fen = Tk()
        fen.configure(bg='white')
        fen.title("PIA")
        larg,haut=fen.winfo_screenwidth(),fen.winfo_screenheight()
        fen.overrideredirect(1)
        fen.geometry("%dx%d+0+0"%(larg,haut))
        cadre=Frame(fen, bg='white',width=2000, height=2000)
        cadre.place(x=160, y=120)	
        cadre2=Frame(fen, bg='white',width=1000, height= 300, relief=RIDGE)
        cadre2.place(x=160, y=600)
        compteur = IntVar()
        compteur.set(0)
        str_texte=StringVar()
        str_quest=StringVar()
        msg_texte = Message(cadre, textvariable=str_texte, bg='white',font='Colibri 35', justify='left', width=1000).pack()
        msg_quest = Message(cadre2, textvariable=str_quest, bg='white',font='Colibri 35', justify='left', width=1000).pack()
     
     
        def go():
            if(compteur.get()%6 == 0):
              if(compteur.get()/6 < len(liste2)):
                str_texte.set(liste2[compteur.get()/6])
              else:
                str_texte.set("Fin des questions!")
                str_quest.set("")
            else:
              if(compteur.get()/6 < len(liste2)):  
                num_texte = compteur.get()/6
                a=randrange(len(questions[num_texte]))
                str_quest.set(questions[num_texte][a])
                del questions[num_texte][a]
     
            compteur.set(compteur.get()+1)
     
     
     
        Button(fen,text='>>>',command=go, bg='grey').place(x=30, y=850)
        Button(fen,text='Quitter',command=fen.destroy, bg='grey').place(x=30, y=900)
     
     
        fen.mainloop()
     
     
     
    Label(fen, text='Concordance-Discordance', font='Times 20 bold', bg='grey').place(x=400, y=150)
    f=Frame(fen, relief=RIDGE, bg='grey')
    f.place(x=400, y=200)
    b1=Button(f, width=5, height=1,text="liste1",command=L1, font='Times 18', fg='black', bg='white')
    b1.grid(row=1,column=1,padx=4)
    b2=Button(f, width=5, height=1,text="liste2",command=L2, font='Times 18', fg='black', bg='white')
    b2.grid(row=1,column=2,padx=4)
    b3=Button(f, width=5, height=1,text="liste3",font='Times 18', fg='black', bg='white')
    b3.grid(row=1,column=3,padx=4)
    b4=Button(f, width=5, height=1,text="liste4",font='Times 18', fg='black', bg='white')
    b4.grid(row=1,column=4,padx=4)
     
    Label(fen, text='Causalité déviante', font='Times 20 bold', bg='grey').place(x=400, y=350)
    f=Frame(fen, relief=RIDGE, bg='grey')
    f.place(x=400, y=400)
    b1=Button(f, width=5, height=1,text="liste1",font='Times 18', fg='black', bg='white')
    b1.grid(row=1,column=1,padx=4)
    b2=Button(f, width=5, height=1,text="liste2",font='Times 18', fg='black', bg='white')
    b2.grid(row=1,column=2,padx=4)
     
    Label(fen, text='Action inintentionnelle', font='Times 20 bold', bg='grey').place(x=400, y=550)
    f=Frame(fen, relief=RIDGE, bg='grey')
    f.place(x=400, y=600)
    b1=Button(f, width=5, height=1,text="liste1",font='Times 18', fg='black', bg='white')
    b1.grid(row=1,column=1,padx=4)
    b2=Button(f, width=5, height=1,text="liste2",font='Times 18', fg='black', bg='white')
    b2.grid(row=1,column=2,padx=4)
     
    Button(fen,text='Quitter',command=fen.destroy, bg='black', fg='white').place(x=30, y=900)
     
     
    fen.mainloop()

  14. #14
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    1) !! UN SEUL "tk()" !!

    Pour Créer de nouvelles fenêtres, utiliser "Toptevel()" (de Tkinter)

    2) Evite de réutiliser 2 fois le même nom pour 2 objets différents.
    Si "fen" est le nom de ta fenêtre de menu, appelle tes fenêtres liées aux thèmes des question différemment (eg fen1, fen2, etc...).
    De même pour les nom des cadres, etc... Dans l'absolue, ce n'est pas génant que les cadres (locaux à chaque fenêtre) s'appelle pareil d'une fenêtre à l'autre, mais si tu as des nom distinct tu es sur d'éviter toute confusion.

    3) un seul mainloop suffis, (mainloop lance le gestionnaire d'événements, un seul est largement suffisant)

    par 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
    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
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
     
    # -*- coding: cp1252 -*-
     
    #! /usr/bin/env python
    # -*- coding: cp1252 -*-
     
    from Tkinter import *
    from random import randrange
     
     
    fen = Tk()
    fen.configure(bg='grey')
    fen.title("PIA")
    larg,haut=fen.winfo_screenwidth(),fen.winfo_screenheight()
    fen.overrideredirect(1)
    fen.geometry("%dx%d+0+0"%(larg,haut))
     
     
    def L1():
        liste1=["texte11","texte12","texte13","texte14","texte15","texte16","texte17","texte18","texte19","texte110"]
        questions=len(liste1)*[0]
        for i in range(len(liste1)):
            questions[i]=["question111","question211","question311","question411","question511"]
            #questions[i]=["question112","question212","question312","question412","question512"]
            #questions[i]=["question113","question213","question313","question413","question513"]
            #questions[i]=["question114","question214","question314","question414","question514"]
            #questions[i]=["question115","question215","question315","question415","question515"]
            #questions[i]=["question116","question216","question316","question416","question516"]
            #questions[i]=["question117","question217","question317","question417","question517"]
            #questions[i]=["question118","question218","question318","question418","question518"]
            #questions[i]=["question119","question219","question319","question419","question519"]
            #questions[i]=["question110","question2110","question3110","question4110","question5110"]
     
        fen1 = Toplevel()
        fen1.configure(bg='white')
        fen1.title("PIA")
        larg,haut=fen1.winfo_screenwidth(),fen1.winfo_screenheight()
        fen1.overrideredirect(1)
        fen1.geometry("%dx%d+0+0"%(larg,haut))
        cadre=Frame(fen1, bg='white',width=2000, height=2000)
        cadre.place(x=160, y=120)	
        cadre2=Frame(fen1, bg='white',width=1000, height= 300, relief=RIDGE)
        cadre2.place(x=160, y=600)
        compteur = IntVar()
        compteur.set(0)
        str_texte=StringVar()
        str_quest=StringVar()
        msg_texte = Message(cadre, textvariable=str_texte, bg='white',font='Colibri 35', justify='left', width=1000).pack()
        msg_quest = Message(cadre2, textvariable=str_quest, bg='white',font='Colibri 35', justify='left', width=1000).pack()
     
        def go():
            if(compteur.get()%6 == 0):
              if(compteur.get()/6 < len(liste1)):
                str_texte.set(liste1[compteur.get()/6])
              else:
                str_texte.set("Fin des questions!")
                str_quest.set("")
            else:
              if(compteur.get()/6 < len(liste1)):  
                num_texte = compteur.get()/6
                a=randrange(len(questions[num_texte]))
                str_quest.set(questions[num_texte][a])
                del questions[num_texte][a]
     
            compteur.set(compteur.get()+1)
     
     
        Button(fen1,text='>>>',command=go, bg='grey').place(x=30, y=850)
        Button(fen1,text='Quitter',command=fen.destroy, bg='grey').place(x=30, y=900)
     
     
        #fen1.mainloop()
     
     
    def L2():
        liste2=["texte21","texte22","texte23","texte24","texte25","texte26","texte27","texte28","texte29","texte210"]
        questions=len(liste2)*[0]
        for i in range(len(liste2)):
            questions[i]=["question121","question221","question321","question421","question521"]
            #questions[i]=["question122","question222","question322","question422","question522"]
            #questions[i]=["question123","question223","question323","question423","question523"]
            #questions[i]=["question124","question224","question324","question424","question524"]
            #questions[i]=["question125","question225","question325","question425","question525"]
            #questions[i]=["question126","question226","question326","question426","question526"]
            #questions[i]=["question127","question227","question327","question427","question527"]
            #questions[i]=["question128","question228","question328","question428","question528"]
            #questions[i]=["question129","question229","question329","question429","question529"]
            #questions[i]=["question1210","question2210","question3210","question4210","question5210"]
     
        fen2 = Toplevel()
        fen2.configure(bg='white')
        fen2.title("PIA")
        larg,haut=fen2.winfo_screenwidth(),fen2.winfo_screenheight()
        fen2.overrideredirect(1)
        fen2.geometry("%dx%d+0+0"%(larg,haut))
        cadre=Frame(fen2, bg='white',width=2000, height=2000)
        cadre.place(x=160, y=120)	
        cadre2=Frame(fen2, bg='white',width=1000, height= 300, relief=RIDGE)
        cadre2.place(x=160, y=600)
        compteur = IntVar()
        compteur.set(0)
        str_texte=StringVar()
        str_quest=StringVar()
        msg_texte = Message(cadre, textvariable=str_texte, bg='white',font='Colibri 35', justify='left', width=1000).pack()
        msg_quest = Message(cadre2, textvariable=str_quest, bg='white',font='Colibri 35', justify='left', width=1000).pack()
     
     
        def go():
            if(compteur.get()%6 == 0):
              if(compteur.get()/6 < len(liste2)):
                str_texte.set(liste2[compteur.get()/6])
              else:
                str_texte.set("Fin des questions!")
                str_quest.set("")
            else:
              if(compteur.get()/6 < len(liste2)):  
                num_texte = compteur.get()/6
                a=randrange(len(questions[num_texte]))
                str_quest.set(questions[num_texte][a])
                del questions[num_texte][a]
     
            compteur.set(compteur.get()+1)
     
     
     
        Button(fen2,text='>>>',command=go, bg='grey').place(x=30, y=850)
        Button(fen2,text='Quitter',command=fen2.destroy, bg='grey').place(x=30, y=900)
     
        #fen2.mainloop()
     
     
     
    Label(fen, text='Concordance-Discordance', font='Times 20 bold', bg='grey').place(x=400, y=150)
    f=Frame(fen, relief=RIDGE, bg='grey')
    f.place(x=400, y=200)
    b1=Button(f, width=5, height=1,text="liste1",command=L1, font='Times 18', fg='black', bg='white')
    b1.grid(row=1,column=1,padx=4)
    b2=Button(f, width=5, height=1,text="liste2",command=L2, font='Times 18', fg='black', bg='white')
    b2.grid(row=1,column=2,padx=4)
    b3=Button(f, width=5, height=1,text="liste3",font='Times 18', fg='black', bg='white')
    b3.grid(row=1,column=3,padx=4)
    b4=Button(f, width=5, height=1,text="liste4",font='Times 18', fg='black', bg='white')
    b4.grid(row=1,column=4,padx=4)
     
    Label(fen, text='Causalité déviante', font='Times 20 bold', bg='grey').place(x=400, y=350)
    f=Frame(fen, relief=RIDGE, bg='grey')
    f.place(x=400, y=400)
    b1=Button(f, width=5, height=1,text="liste1",font='Times 18', fg='black', bg='white')
    b1.grid(row=1,column=1,padx=4)
    b2=Button(f, width=5, height=1,text="liste2",font='Times 18', fg='black', bg='white')
    b2.grid(row=1,column=2,padx=4)
     
    Label(fen, text='Action inintentionnelle', font='Times 20 bold', bg='grey').place(x=400, y=550)
    f=Frame(fen, relief=RIDGE, bg='grey')
    f.place(x=400, y=600)
    b1=Button(f, width=5, height=1,text="liste1",font='Times 18', fg='black', bg='white')
    b1.grid(row=1,column=1,padx=4)
    b2=Button(f, width=5, height=1,text="liste2",font='Times 18', fg='black', bg='white')
    b2.grid(row=1,column=2,padx=4)
     
    Button(fen,text='Quitter',command=fen.destroy, bg='black', fg='white').place(x=30, y=900)
     
     
    fen.mainloop()

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    Bonjour Gaillac,
    Merci pour le Toplevel()
    Je bloque pour l'adressage des différentes questions pour chaque texte
    Il va falloir que je spécifie mes listes de questions je pense
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    liste1=["texte1","texte2","texte3","texte4","texte5","texte6","texte7","texte8","texte9","texte10"]
    questions=len(liste1)*[0]
    for i in range(len(liste1)):
        questions[i]=["question1a","question1b","question1c","question1d","question1e"]
        questions[i]=["question2a","question2b","question2c","question2d","question2e"]
        questions[i]=["question3a","question3b","question3c","question3d","question3e"]
        questions[i]=["question4a","question4b","question4c","question4d","question4e"]
        questions[i]=["question5a","question5b","question5c","question5d","question5e"]
        questions[i]=["question6a","question6b","question6c","question6d","question6e"]
        questions[i]=["question7a","question7b","question7c","question7d","question7e"]
        questions[i]=["question8a","question8b","question8c","question8d","question8e"]
        questions[i]=["question9a","question9b","question9c","question9d","question9e"]
        questions[i]=["question10a","question10b","question10c","question10d","question10e"]
    et certainement changer des trucs dans la fonction go....
    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
    def go():
        if(compteur.get()%6 == 0):
          if(compteur.get()/6 < len(liste1)):
            str_texte.set(liste1[compteur.get()/6])
          else:
            str_texte.set("Fin des questions!")
            str_quest.set("")
        else:
          if(compteur.get()/6 < len(liste1)):  
            num_texte = compteur.get()/6
            a=randrange(len(questions[num_texte]))
            str_quest.set(questions[num_texte][a])
            del questions[num_texte][a]
     
        compteur.set(compteur.get()+1)
    si tu as un petit indice à me filer....

  16. #16
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    C'est le code que tu as mis ou compte mettre?

    Quoi qu'il en soit il n'est pas bon

    Je t'explique :

    j'ai utilisé une boucle for parce que j'avais la flemme d'écrire les 100 questions et que je ne m'intéressais pas au contenu des questions, donc c'était un moyen rapide d'avoir 100 questions distinctes.
    Mais dès que l'on veut mettre le vrai texte, tu en peux plus utiliser de boucle!

    Regarde ce que ton code fait :

    questions=len(liste1)*[0]
    ça c'est très bien, ça crée un tableau pas encore bidimensionel.

    for i in range(len(liste1)):
    La tu parts sur une boucle où ton indice i ira de 1 à 10
    => première itération, i=1
    questions[i]=["question1a","question1b","question1c","question1d","question1e"]
    => question[1] vaut maintenant ["question1a","question1b","question1c","question1d","question1e"], c'est bien.
    questions[i]=["question2a","question2b","question2c","question2d","question2e"]
    => là c'est le drame, tu ré-écris sur question[1] !! Il vaut maintenant ["question2a","question2b","question2c","question2d","question2e"]
    questions[i]=["question3a","question3b","question3c","question3d","question3e"]
    => un drame n'arrive jamais seul, tu ré-ré-écris sur question[1] qui vaut maintenant ["question3a","question3b","question3c","question3d","question3e"]
    questions[i]=["question4a","question4b","question4c","question4d","question4e"]
    => devine quoi? tu écrase une nouvelle fois question[1].
    bref à la fin de ta première itération, tu as question[1] qui vaut ["question10a","question10b","question10c","question10,"question10e"]

    2ème itération, tu refais la même chose mais pour question[2] qui vaut successivement ["question1a","question1b","question1c","question1d","question1e"], ["question2a","question2b","question2c","question2d","question2e"], ... et finit aussi à ["question10a","question10b","question10c","question10d","question10e"]

    Tu as compris, tu fais ça 10 fois et tu obtiens un tableau final assez inintéressant :
    questions =
    [["question10a","question10b","question10c","question10d","question10e"],
    ["question10a","question10b","question10c","question10d","question10e"],
    ["question10a","question10b","question10c","question10d","question10e"],
    ["question10a","question10b","question10c","question10d","question10e"],
    ["question10a","question10b","question10c","question10d","question10e"],
    ["question10a","question10b","question10c","question10d","question10e"],
    ["question10a","question10b","question10c","question10d","question10e"],
    ["question10a","question10b","question10c","question10d","question10e"],
    ["question10a","question10b","question10c","question10d","question10e"],
    ["question10a","question10b","question10c","question10d","question10e"]]


    Vire la boucle, et écrit directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        questions[1]=["question1a","question1b","question1c","question1d","question1e"]
        questions[2]=["question2a","question2b","question2c","question2d","question2e"]
        questions[3]=["question3a","question3b","question3c","question3d","question3e"]
        questions[4]=["question4a","question4b","question4c","question4d","question4e"]
        questions[5]=["question5a","question5b","question5c","question5d","question5e"]
        questions[6]=["question6a","question6b","question6c","question6d","question6e"]
        questions[7]=["question7a","question7b","question7c","question7d","question7e"]
        questions[8]=["question8a","question8b","question8c","question8d","question8e"]
        questions[9]=["question9a","question9b","question9c","question9d","question9e"]
        questions[10]=["question10a","question10b","question10c","question10d","question10e"]

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    Bonjour Gaillac,

    Faut-il laisser les numéros de questions entre crochets comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    questions[1]=["question1a","question1b","question1c","question1d","question1e"]
    questions[2]=["question2a","question2b","question2c","question2d","question2e"]
    ou retirer les crochets comme ceci ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    questions1=["question1a","question1b","question1c","question1d","question1e"]
    questions2=["question2a","question2b","question2c","question2d","question2e"]
    tu me diras çà ne fonctionne pas dans les 2 cas

    quoiqu'il en soit je pense qu'il faut modifier des trucs 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
    def go():
            if(compteur.get()%6 == 0):
              if(compteur.get()/6 < len(liste1)):
                str_texte.set(liste1[compteur.get()/6])
              else:
                str_texte.set("Fin des questions!")
                str_quest.set("")
            else:
              if(compteur.get()/6 < len(liste1)):  
                num_texte = compteur.get()/6
                a=randrange(len(questions[num_texte]))
                str_quest.set(questions[num_texte][a])
                del questions[num_texte][a]
     
            compteur.set(compteur.get()+1)
    non?

    et merci pour ton dernier message qui m'a bien éclairé

  18. #18
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    Citation Envoyé par florent77 Voir le message
    Bonjour Gaillac,

    Faut-il laisser les numéros de questions entre crochets comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    questions[1]=["question1a","question1b","question1c","question1d","question1e"]
    questions[2]=["question2a","question2b","question2c","question2d","question2e"]
    ou retirer les crochets comme ceci ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    questions1=["question1a","question1b","question1c","question1d","question1e"]
    questions2=["question2a","question2b","question2c","question2d","question2e"]
    Tout dépend en fait!!

    Dans le premier exemple, le "mien" (avec les crochets), on utilise un tableau bi-dimensionnel façon python, c'est à dire en fait un tableau monodimetionel de tableaux monodimentionels.

    Par contre, le tableau "questions" que j'ai crée est indicé de 0 à 9 et non pas de 1 à 10, tes problèmes viennent peut être de là.

    questions[0] est un tableau de 10 chaines de caractères
    questions[1] est un autre tableau de 10 chaines de caractères
    etc.
    bref, questions est un tableau de tableau de 10 chaines de caractères

    Si tu choisi l'autre option, celle d'avoir 10 tableaux séparés,
    questions1, questions2, questions3, etc... tu va avoir un problème supplémentaire :
    Quand tu vas vouloir utiliser (afficher) question1, il va faloir que tu nomme explicitement ce tableau.
    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a=randrange(len(question1))
    str_quest.set(question1[a])
    problème, à la question suivante tu vas devoir utiliser question2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a=randrange(len(question2))
    str_quest.set(question2[a])
    Donc impossible d'utiliser le même code, et obliger de te trimbaler une grosse structure conditionnelle qui teste à quelle question tu en est pour savoir quel code utilisé. Au passage, tu vs dupliqué 10 fois le même code, c'est moche; En plus, tu perd toute la flexibilité lié au nombre de questions. Si tu décide d'augmenter le nombre de question, avec un tableau u n'a quasiment rien à faire si ce n'est agrandir ton tableau.
    Avec des listes séparés, c'est le principe du code dupliqué, il faut le recopier pour chaque nouvelle question.

    Une troisième voie consisterait à utiliser une chaine de caractère variable qui passerais de "question1 " à "question2" puis "question3" etc et à l'utiliser comme nom de tableau, mais personnellement j'ai déjà essayé ce genre de truc, et après moult tâtonnements(et d'échecs) j'ai décidé de faire autrement.


    Pour ce qui est de la fonction "go", à part son nom peut explicite je ne sais pas ce que tu veux y changer, mais si elle ne te convient pas, change là!
    Tiens, pour te faire plaisir je l'ai un peu modifiée! Un peu hein, j'ai retiré deux "espaces" pour sortir "str_quest.set("")" du else. Comme ça, à chaque nouveau "texte", avant de poser la première question ion efface la dernière question de la série précédente.
    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
     
    # -*- coding: cp1252 -*-
     
    #! /usr/bin/env python
    # -*- coding: cp1252 -*-
     
    from Tkinter import *
    from random import randrange
     
     
    liste1=["texte1","texte2","texte3","texte4","texte5","texte6","texte7","texte8","texte9","texte10"]
    questions=len(liste1)*[0]
    for i in range(len(liste1)):
        questions[i]=["question"+str(i+1)+"1","question"+str(i+1)+"2","question"+str(i+1)+"3","question"+str(i+1)+"4","question"+str(i+1)+"5"]
     
    questions[0][0]="En 2010, la première plage réfrigérée au monde devrait voir le jour à..."
    questions[0][1]="En Serbie, deux lionceaux viennent de naître au zoo de Belgrade, ils vont ainsi permettre de renforcer les effectifs de l'espèce menacée des lions..."
    questions[0][2]="Parmi ces espèces de tigres, laquelle est définitivement éteinte ?"
    questions[0][3]="L'Agence de protection américaine de l'environnement s'apprête à publier une liste d'individus recherchés pour leurs..."
    questions[0][4]="Récemment, dans quel pays européen des analyses ont montré une contamination à la dixione de certains élevages de porcs et de bovins ?"
     
    questions[1][0]="Mardi dernier, la France a été condamnée à une amende de 10 millions d'euros pour avoir tardé à appliquer une loi européenne..."
    questions[1][1]="Dans l'Union européenne, en quelle année la commercialisation des ampoules traditionnelles sera interdite au profit des ampoules basse consommation ?"
    questions[1][2]="Hier, 57 écologistes ont été arrêtés après avoir paralysé l'aéroport londonien de..."
    questions[1][3]="Selon un sondage publié par les Ateliers de la Terre, quel pourcentage des français considèrent que la réduction du nombre des espèces animales et végétales met en danger la survie de l'homme ?"
    questions[1][4]="Hier avait lieu la Journée mondiale d'action contre..."
     
     
    fen1 = Tk()
    fen1.configure(bg='white')
    fen1.title("PIA")
    larg,haut=fen1.winfo_screenwidth(),fen1.winfo_screenheight()
    fen1.overrideredirect(1)
    fen1.geometry("%dx%d+0+0"%(larg,haut))
    cadre=Frame(fen1, bg='white',width=2000, height=2000)
    cadre.place(x=160, y=120)	
    cadre2=Frame(fen1, bg='white',width=1000, height= 300, relief=RIDGE)
    cadre2.place(x=160, y=600)
    compteur = IntVar()
    compteur.set(0)
    str_texte=StringVar()
    str_quest=StringVar()
    msg_texte = Message(cadre, textvariable=str_texte, bg='white',font='Colibri 35', justify='left', width=1000).pack()
    msg_quest = Message(cadre2, textvariable=str_quest, bg='white',font='Colibri 35', justify='left', width=1000).pack()
     
     
    def L1():
        if(compteur.get()%6 == 0):
          if(compteur.get()/6 < len(liste1)):
            str_texte.set(liste1[compteur.get()/6])
          else:
            str_texte.set("Fin des questions!")
          str_quest.set("")
        else:
          if(compteur.get()/6 < len(liste1)):  
            num_texte = compteur.get()/6
            a=randrange(len(questions[num_texte]))
            str_quest.set(questions[num_texte][a])
            del questions[num_texte][a]
     
        compteur.set(compteur.get()+1)
     
     
     
     
     
    Button(fen1,text='Textes',command=L1, bg='grey').place(x=30, y=700)
    #Button(fen1,text='Questions',command=QL11, bg='grey').place(x=30, y=750)
    Button(fen1,text='Quitter',command=fen1.destroy, bg='grey').place(x=30, y=800)
     
     
    fen1.mainloop()
    Edit : j'ai laissé dans mon code l'initialisation automatique de tout le tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(len(liste1)):
        questions[i]=["question"+str(i+1)+"1","question"+str(i+1)+"2","question"+str(i+1)+"3","question"+str(i+1)+"4","question"+str(i+1)+"5"]
    parce que je n'ai initialisé manuellement que les deux premières séries de questions, mais dans l'absolu elle devient inutile si l'initialisation manuelle est complète (une fois que l'ensemble du tableau est initialisé manuellement c'est à dire que tu a écrit tes 50 questions à la main).

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    merci Gaillac, tout est nickel... tu as même anticipé l'effaçage de la dernière question de chaque texte

    le problème venait effectivement de l'indiçage qui va de 0 à 9 et non de 1 à 10comme j'avais fait

    me reste plus qu'à rentrer tous mes textes et mes questions

    si tu as encore un peu de patience pourrais-tu m'expliquer cette fameuse fonction go (oui je sais pas terrible comme nom je vais modifier) qui lance les textes et les questions... j'ai pas tout saisi notamment le /6, le modulo...

  20. #20
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    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
     
    def L1():
        if(compteur.get()%6 == 0):
          if(compteur.get()/6 < len(liste1)):
            str_texte.set(liste1[compteur.get()/6])
          else:
            str_texte.set("Fin des questions!")
          str_quest.set("")
        else:
          if(compteur.get()/6 < len(liste1)):  
            num_texte = compteur.get()/6
            a=randrange(len(questions[num_texte]))
            str_quest.set(questions[num_texte][a])
            del questions[num_texte][a]
     
        compteur.set(compteur.get()+1)
    alors d'abord, petites précisions :
    "var%6" a pour résultat le reste de la division Euclidienne de var par 6.
    "var/6" a pour résultat le quotient de la division Euclidienne de var par 6.
    (var étant un entier)

    La séquence de tes clics fait que :
    le premier clic affiche un nouveau texte
    les 5 suivant affiche une nouvelle question
    le suivant affiche un nouveau texte
    les 5 suivant affiche une nouvelle question
    etc...

    Tout ça est très cyclique : 1-5-1-5-1-5
    or, 1+5 = 6 => on le tient le 6
    Encore mieux :
    On affiche un nouveau texte aux "temps" 1, 7, 13, 19, etc... ce qui est une façon bien humaine de compter. mais on n'est plus humain depuis longtemps, on est geek. On commence donc à compter depuis 0.
    Du coup c'est les temps 0,6,12,18,24,etc qui nous intéresse.
    Que des multiples de 6. Que des nombres dont le reste de la DE (Division Euclidienne) par 6 vaut 0.

    Et ben voilà, on est parti

    Le compteur est initialisé à 0.

    Code PseudoCode : 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
    si le reste de la DE de compteur par 6 vaut 0
    alors
        on est sur un temps "nouveau texte"
        le quotient de la DE de compteur par 6 correspond au numéro de notre cycle (de 0 à n-1 ou n est le nombre de textes disponibles)
        si le quotient de la DE de compteur par 6 est (strictement) inférieur à la taille de la liste de texte, c'est à dire s'il reste encore des nouveaux texte à afficher
        alors
            on affiche le nouveau texte
        sinon
            on a finit, on affiche un texte du genre "Fin des questions!" (et surtout on n'essaye pas de lire dans le tableau des textes à un indice trop grand)
        fin si
        on efface la question précédente
    sinon
        si le quotient de la DE de compteur par 6 est (strictement) inférieur à la taille de la liste de texte (encore)
        alors
            on choisi un nombre entier aléatoire compris entre 0 et la taille - 1 de la liste de question correspondant au numéro du cycle/du texte
            on affiche la question associée
            on vire la question de la liste pour assurrer un tirage sans remise
        fin si
    fin si
    
    On incrémente le compteur

    La procédure n'est pas optimisée.
    Déjà, elle se sert partout du quotient, donc on pourrait le calculer d'entrée, le stoker dans une variable temporaire et utiliser la variable. C'est ce qui est fait bien trop tard avec "num_texte = compteur.get()/6"

    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 L1():
        num_texte = compteur.get()/6    
        if(compteur.get()%6 == 0):
          if(num_texte < len(liste1)):
            str_texte.set(liste1[num_texte])
          else:
            str_texte.set("Fin des questions!")
          str_quest.set("")
        else:
          if(num_texte < len(liste1)):  
            a=randrange(len(questions[num_texte]))
            str_quest.set(questions[num_texte][a])
            del questions[num_texte][a]
     
        compteur.set(compteur.get()+1)
    serait déjà mieux

    Edit : en faisant la mise en page, je m'aperçois que je n'ai pas nécessairement été d'une grande clarté.. disons un peu fouillis

Discussions similaires

  1. [Lisp][IA] Supprimer une liste d'une liste de listes
    Par Superleo2999 dans le forum Lisp
    Réponses: 5
    Dernier message: 22/03/2010, 10h51
  2. caster une List<Object> en List<..>
    Par K-Kaï dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2006, 17h43
  3. Réponses: 16
    Dernier message: 22/05/2006, 10h48
  4. Ajout de listes dans une liste
    Par mcdonald dans le forum Général Python
    Réponses: 4
    Dernier message: 10/01/2006, 22h39
  5. [langage] probleme avec les listes dans des listes
    Par pqmoltonel dans le forum Langage
    Réponses: 7
    Dernier message: 27/04/2004, 12h32

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