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

GUI Python Discussion :

Aide tkinter / questionnaire


Sujet :

GUI Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2017
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Aide tkinter / questionnaire
    Bonjour,
    J'ai quelques bases en python sur des instructions simple (niveau scolaire), mais je souhaiterais en savoir un peu plus.
    J'ai fait un petit programme de révision qui fonctionne correctement, mais maintenant, je voudrais faire une interface graphique pour ce programme.
    J'ai commencé à faire quelques tests avec tkinter (j'arrive à avoir une interface potable, qui correspond à ce que je souhaite mais je n'arrive pas à faire fonctionner le programme avec cette interface).

    1er programme (sans tkinter) :

    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
    import random
     
    choix = 0
    while choix < 1 or choix > 8 : # boucle de selection du questionnaire
        print(" 1 : SISR")
        print(" 2 : MATHS")
        print(" 3 : MATHS OPTION")
        print(" 4 : CULTURE G.")
        print(" 5 : ECO-MANA")
        print(" 6 : DROITS")
        print(" 7 : SI")
        print(" 8 : ALL\n")
     
        choix = int(input(" Choisir un questionnaire : " ))
        print( ) #Espace pour eviter les blockos
     
    # tableau de questions SISR
    tb1 = [["Que signifie le premier bit d'une adresse MAC quand il est à 0 ?","unicast"],
           ["Que signifie le premier bit d'une adresse MAC quand il est à 1 ?","multicast"],
           ["Que signifie le second bit d'une adresse MAC quand il est à 0 ?","universelle"],
           ["Que signifie le second bit d'une adresse MAC quand il est à 1 ?","local"],
           ["Que représente les bits 3 à 24 d'une adresse MAC ?","identifiant constructeur"],
           ["Que représente les bits 25 à 48 d'une adresse MAC ?","identifiant carte"]]
     
    # tableau de questions MATHS
    tb2 = [["En numération, comment appelle t'on la base 2 ?","binaire"],
           ["En numération, comment appelle t'on la base 10 ?","décimale"],
           ["En numération, comment appelle t'on la base 16 ?","héxadécimale"],
           ["En numération, comment appelle t'on la notation du signe en binaire (positif ou négatif) ?","signé"]]
     
    # tableau de questions MATHS OPTION
    tb3 = [["En statistique, comment appelle t'on l'ensemble sur lequel porte une expérience, d'individus ou unité statiques ?","population"],
           ["En statistique, comment appelle t'on une partie (sous ensemble) d'une population ?","echantillon"],
           ["En statistique, comment appelle t'on l'objet de l'expérience, de l'individu que l'on étudie?","caractère"],
           ["En statistique, comment appelle t'on un caractère qui ne peut pas être mesuré ?","qualitatif"],
           ["En statistique, comment appelle t'on un caractère qui peut être mesuré ?","quantitatif"]]
     
    # tableau de questions CULTURE G.
    tb4 = [["En confrontation, comment appelle t'on les points de vue entre les auteurs qui se renforcent ?","convergence"],
           ["En confrontation, comment appelle t'on un point de vue qui est approfondi par un autre ?","complémentarité"],
           ["En confrontation, comment appelle t'on un point de vue qui est nuancé, remis en question partiellement par un autre ?","divergence"]]
     
    # tableau de questions ECO-MANA
    tb5 = [["Que signifie B2B ?","business to business"],
           ["Que signifie B2C ?","business to consumer"],
           ["Que signifie C2C ?","consumer to consumer"],
           ["Que signifie C2B ?","consumer to business"]]
     
    # tableau de questions DROITS
    tb6 = [["Comment appelle t'on, l'ensemble de textes qui organise le fonctionnement des institutions et la répartition des pouvoirs et qui affirme les grandes libertés et les grands principes qui fondent le système juridique français ?","constitution"],
           ["Comment appelle t'on une règle juridique écrite et votée par le parlement qui détient le pouvoir l'égislatif ?","loi"]]
     
    # tableau de questions SI
    tb7 = [["En Python, quelle commande permet l'affichage à l'écran ?","print()"],
           ["En Python, quelle commande permet d'afficher une phrase  et de récupérer une réponse sous forme de chaine de caractère ?","input()"],
           ["En Python, quelle commande permet de transtyper une chaine de caractère en entier ?","int()"],
           ["En Python, quelle commande permet de transtyper une chaine de caractère en réel ?","float()"],
           ["En Python, quelle commande permet de transtyper un nombre en chaine de caractère ?","str()"]]
     
    # tableau réunissant les questions de tous les thèmes
    tb8 = tb1 + tb2 + tb3 + tb4 +tb5 + tb6 + tb7
     
    #Incère les questions du thème choisie dans le chargeur
    if choix == 1 :
        chargeur = tb1
    if choix == 2 :
        chargeur = tb2
    if choix == 3 :
        chargeur = tb3
    if choix == 4 :
        chargeur = tb4
    if choix == 5 :
        chargeur = tb5
    if choix == 6 :
        chargeur = tb6
    if choix == 7 :
        chargeur = tb7
    if choix == 8 :
        chargeur = tb8
     
    cpt0 = 0 #Compteur de mauvaises réponses
    cpt1 = 0 #Compteur de bonnes réponses
     
    x = 0
    while x < 1 : #Condition de sortie de boucle
        for i in range(0,1):
            print ("Vrai :",cpt1,"- Faux :",cpt0,"\n")
     
            qst = random.choice(chargeur)  #Prend une question au hasard.................................PROBLEME SI IL N'Y A PLUS DE QUESTIONS DANS LE CHARGEUR.......................................
            chargeur.remove(qst)  #Enleve la question de la liste
            print(qst[0],"\n")  #Affiche la question 
     
            rep = str(input("Réponse: ")) #Demande de saisie de la réponse
     
            if rep == "quitter" : #Permet de quitter la boucle
                x = 1 # Rempli la condition de sortie de boucle
     
            if rep != "quitter" :
                if rep == qst[1]: #Rep vrai
                    print( ) #Espace pour eviter les blockos
                    print("-- VRAI --\n")
                    cpt1 += 1
     
                if rep != qst[1]: #SRep fausse
                    print( ) #Espace pour eviter les blockos
                    print("-- FAUX --\n")
                    print(" La bonne réponse était :",qst[1],"\n")
                    cpt0 += 1
     
     
    print( ) #Espace pour eviter les blockos
    print("Fin ! ")
    print((cpt1/(cpt1 + cpt0))*100,"% de réponses correctes")
    interface que j'ai obtenue avec tkinter :

    Nom : 2017-05-17-165520_692x250_scrot.png
Affichages : 2827
Taille : 16,2 Ko

    Si quelqu'un peu m'aidé, je suis preneur de toutes infos !!

  2. #2
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Yoduma Voir le message
    1er programme (sans tkinter)
    C'est le problème, si tu ne montres pas ce que tu as fait avec tkinter, en détaillant les parties où tu n'arrives pas à y intégrer ton code, personne ne pourras t'aiguiller.
    Le temps ronge l'amour comme l'acide.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2017
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Oui désolé, j'avais oublié de mettre le code avec tkinter ^^.

    Donc voici le code (Le code n'est pas propre. J'ai fais des tests avec tkinter dans tous les sens) :

    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
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    from tkinter import * # importe la bibliothèque Tkinter qui permet la création d'interfaces graphiques.
     
    from random import * # importe la fonction random qui sert pour le choix aléatoire des questions.
     
    # Création des tableaux (chaque tableau représente un thème):
    # tableau de questions SISR:
    tb1 = [["Que signifie le premier bit d'une adresse MAC quand il est à 0 ?","unicast"],
           ["Que signifie le premier bit d'une adresse MAC quand il est à 1 ?","multicast"],
           ["Que signifie le second bit d'une adresse MAC quand il est à 0 ?","universelle"],
           ["Que signifie le second bit d'une adresse MAC quand il est à 1 ?","local"],
           ["Que représente les bits 3 à 24 d'une adresse MAC ?","identifiant constructeur"],
           ["Que représente les bits 25 à 48 d'une adresse MAC ?","identifiant carte"]]
     
    # tableau de questions MATHS:
    tb2 = [["En numération, comment appelle t'on la base 2 ?","binaire"],
           ["En numération, comment appelle t'on la base 10 ?","décimale"],
           ["En numération, comment appelle t'on la base 16 ?","héxadécimale"],
           ["En numération, comment appelle t'on la notation du signe en binaire (positif ou négatif) ?","signé"]]
     
    # tableau de questions MATHS OPTION:
    tb3 = [["En statistique, comment appelle t'on l'ensemble sur lequel porte une expérience, d'individus ou unité statiques ?","population"],
           ["En statistique, comment appelle t'on une partie (sous ensemble) d'une population ?","echantillon"],
           ["En statistique, comment appelle t'on l'objet de l'expérience, de l'individu que l'on étudie?","caractère"],
           ["En statistique, comment appelle t'on un caractère qui ne peut pas être mesuré ?","qualitatif"],
           ["En statistique, comment appelle t'on un caractère qui peut être mesuré ?","quantitatif"]]
     
    # tableau de questions CULTURE G.:
    tb4 = [["En confrontation, comment appelle t'on les points de vue entre les auteurs qui se renforcent ?","convergence"],
           ["En confrontation, comment appelle t'on un point de vue qui est approfondi par un autre ?","complémentarité"],
           ["En confrontation, comment appelle t'on un point de vue qui est nuancé, remis en question partiellement par un autre ?","divergence"]]
     
    # tableau de questions ECO-MANA:
    tb5 = [["Que signifie B2B ?","business to business"],
           ["Que signifie B2C ?","business to consumer"],
           ["Que signifie C2C ?","consumer to consumer"],
           ["Que signifie C2B ?","consumer to business"]]
     
    # tableau de questions DROITS:
    tb6 = [["Comment appelle t'on, l'ensemble de textes qui organise le fonctionnement des institutions et la répartition des pouvoirs et qui affirme les grandes libertés et les grands principes qui fondent le système juridique français ?","constitution"],
           ["Comment appelle t'on une règle juridique écrite et votée par le parlement qui détient le pouvoir l'égislatif ?","loi"]]
     
    # tableau de questions SI:
    tb7 = [["En Python, quelle commande permet l'affichage à l'écran ?","print()"],
           ["En Python, quelle commande permet d'afficher une phrase  et de récupérer une réponse sous forme de chaine de caractère ?","input()"],
           ["En Python, quelle commande permet de transtyper une chaine de caractère en entier ?","int()"],
           ["En Python, quelle commande permet de transtyper une chaine de caractère en réel ?","float()"],
           ["En Python, quelle commande permet de transtyper un nombre en chaine de caractère ?","str()"]]
     
    # tableau réunissant les questions de tous les thèmes.
    tb8 = tb1 + tb2 + tb3 + tb4 +tb5 + tb6 + tb7
     
    # Création de la fenêtre principal.
    fenetre=Tk()
    fenetre.title('Application de révision')
     
    #Création du cadre pour selectionner le thème.
    cadre1 = Frame(fenetre, borderwidth=2, relief=GROOVE)
    # Affiche le cadre1.
    cadre1.pack(side=LEFT, padx=10, pady=10)
    # Affiche le titre dans le cadre1 (qui sert de consigne au sein du cadre).
    Label(cadre1, text="Choisir un questionnaire :").pack(padx=10, pady=10)
     
    # Création des radio-boutons avec des valeurs pour choisir quelle matière réviser.
    choix_theme = IntVar(value=0)
    bt1 = Radiobutton(cadre1, text="SISR", variable=choix_theme, value=1)
    bt2 = Radiobutton(cadre1, text="MATHS", variable=choix_theme, value=2)
    bt3 = Radiobutton(cadre1, text="MATHS OPTION", variable=choix_theme, value=3)
    bt4 = Radiobutton(cadre1, text="CULTURE G.", variable=choix_theme, value=4)
    bt5 = Radiobutton(cadre1, text="ECO-MANA", variable=choix_theme, value=5)
    bt6 = Radiobutton(cadre1, text="DROITS", variable=choix_theme, value=6)
    bt7 = Radiobutton(cadre1, text="SI", variable=choix_theme, value=7)
    bt8 = Radiobutton(cadre1, text="ALL", variable=choix_theme, value=8)
    # Affichage des radio-boutons dans le "cadre1".
    bt1.pack()
    bt2.pack()
    bt3.pack()
    bt4.pack()
    bt5.pack()
    bt6.pack()
    bt7.pack()
    bt8.pack()
     
    def resultat_choix():
        choix = (choix_theme.get())
        if choix==1:
            chargeur=tb1
        if choix==2:
            chargeur=tb2
        if choix==3:
            chargeur=tb3
        if choix==4:
            chargeur=tb4
        if choix==5:
            chargeur=tb5
        if choix==6:
            chargeur=tb6
        if choix==7:
            chargeur=tb7
        if choix==8:
            chargeur=tb8
        print(chargeur)
     
    bouton = Button (cadre1, text="Valider", command = resultat_choix)
    bouton.pack()
     
    # Création d'un cadre pour afficher les questions.
    cadre2 = Frame(fenetre, borderwidth=2, relief=GROOVE)
    # Affiche le cadre2.
    cadre2.pack(side=LEFT, padx=10, pady=10)
    # Affiche le titre dans le cadre2.
    Label(cadre2, text="Question :").pack(padx=10, pady=10)
     
    # Création d'un cadre dans le "cadre2" pour taper la réponse à la question.
    cadre3 = Frame(cadre2, bg="white", borderwidth=2, relief=GROOVE)
    # Affiche le cadre3.
    cadre3.pack(side=LEFT, padx=10, pady=10)
    # Affiche le titre du cadre3.
    Label(cadre3, text="Votre réponse :", bg="white").pack(padx=10, pady=10)
     
    crep = IntVar()
    ligne_texte = Entry(cadre3, textvariable=crep, width=30)
    ligne_texte.pack()
     
    # Création d'un cadre pour afficher le score.
    cadre4 = Frame(fenetre, borderwidth=2, relief=GROOVE)
    # Affiche le cadre4.
    cadre4.pack(side=LEFT, padx=10, pady=10)
    # Affiche le titre du cadre4.
    Label(cadre4, text="Score :").pack(padx=10, pady=10)
     
    # Création d'un cadre dans le "cadre2" pour taper la réponse à la question.
    cadre5 = Frame(cadre4, bg="white", borderwidth=2, relief=GROOVE)
    # Affiche le cadre3.
    cadre5.pack(side=LEFT, padx=10, pady=10)
    # Affiche le titre du cadre3.
    Label(cadre5, text="Vrai :", bg="white").pack(padx=10, pady=10)
     
    cpt1 = 0 # Compteur de bonnes réponses
     
    def inc1():
        val = infos['valeur']
        v += 1
        infos['valeur'] = val
     
        my_bonnrep.itemconfig(text, text=str(val))
     
    infos = {'valeur': cpt1, }
     
    my_bonnrep = Canvas(cadre5, width=20, height=20)
    my_bonnrep.pack()
    text = my_bonnrep.create_text((10, 10), text=cpt1)
     
    # Création d'un cadre dans le "cadre2" pour taper la réponse à la question.
    cadre6 = Frame(cadre4, bg="white", borderwidth=2, relief=GROOVE)
    # Affiche le cadre3.
    cadre6.pack(side=LEFT, padx=10, pady=10)
    # Affiche le titre du cadre3.
    Label(cadre6, text="Faux :", bg="white").pack(padx=10, pady=10)
     
    cpt2 = 0 # Compteur de mauvaises réponses
     
    def inc2():
        val = infos['valeur']
        v += 1
        infos['valeur'] = val
     
        my_mauvrep.itemconfig(text, text=str(val))
     
    infos = {'valeur': cpt2, }
     
    my_mauvrep = Canvas(cadre6, width=20, height=20)
    my_mauvrep.pack()
    text = my_mauvrep.create_text((10, 10), text=cpt2)
     
    print(qst)
    mainloop()
    Mes problèmes sont nombreux :
    La première partie fonctionne correctement (quand je coche un radiobutton pour choisir un thème et que je clique sur valider, le choix du questionnaire est correctement exécuté).
    Mais ensuite, je ne connais pas la méthodologie pour que le reste fonctionne (choix aléatoire de la question, affichage de la question dans le cadre "Question", comment récupérer la réponse saisi dans le champ pour répondre, etc).

  4. #4
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    La première chose flagrante c'est que l'endroit où doit s'afficher ta question est bien trop étroit, faut que tu revoies l'agencement des éléments de ta fenêtre, pour ça prend une feuille, un crayon et réfléchis à cette organisation.

    Il faut également ajouter un bouton pour que l'utilisateur puisse valider sa réponse.

    Sachant que ce n'est pas un qcm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    crep = IntVar()
    ligne_texte = Entry(cadre3, textvariable=crep, width=30)
    ligne_texte.pack()
    Pourquoi un IntVar, la réponse doit être du texte non ?

    Maintenant, tu récupères une liste de question dans ta fonction resultat_choix (qui sera à revoir ultérieurement), donc de là il te suffit de choisir un élément avec random.choice (tu verras plus tard pour éviter de poser les mêmes questions) et de l'affecter à ton label où doit être affichée ta question, un simple ton_label.configure suffit à le faire, et pour la réponse, tu peux créer une variable globale pour l'y stocker.

    Mais déjà repense ta fenêtre.
    Et nommes tes variables correctement, par exemple au lieu de cadre6, utilise cadreReponse.
    Le temps ronge l'amour comme l'acide.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2017
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    J'ai revu le positionnement des éléments dans la fenêtre :
    Nom : Plan.png
Affichages : 2591
Taille : 33,9 Ko

  6. #6
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2017
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Mais je n'arrive pas tout à fait à le faire^^(je narrive pas à modifier la taille de mes "frame" et à les placer correctement).

    Et j'ai renommé les variables :

    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
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    from tkinter import * # importe la bibliothèque Tkinter qui permet la création d'interfaces graphiques.
     
    from random import * # importe la fonction random qui sert pour le choix aléatoire des questions.
     
    # Création des tableaux (chaque tableau représente un thème):
    # tableau de questions SISR:
    tb1 = [["Que signifie le premier bit d'une adresse MAC quand il est à 0 ?","unicast"],
           ["Que signifie le premier bit d'une adresse MAC quand il est à 1 ?","multicast"],
           ["Que signifie le second bit d'une adresse MAC quand il est à 0 ?","universelle"],
           ["Que signifie le second bit d'une adresse MAC quand il est à 1 ?","local"],
           ["Que représente les bits 3 à 24 d'une adresse MAC ?","identifiant constructeur"],
           ["Que représente les bits 25 à 48 d'une adresse MAC ?","identifiant carte"]]
     
    # tableau de questions MATHS:
    tb2 = [["En numération, comment appelle t'on la base 2 ?","binaire"],
           ["En numération, comment appelle t'on la base 10 ?","décimale"],
           ["En numération, comment appelle t'on la base 16 ?","héxadécimale"],
           ["En numération, comment appelle t'on la notation du signe en binaire (positif ou négatif) ?","signé"]]
     
    # tableau de questions MATHS OPTION:
    tb3 = [["En statistique, comment appelle t'on l'ensemble sur lequel porte une expérience, d'individus ou unité statiques ?","population"],
           ["En statistique, comment appelle t'on une partie (sous ensemble) d'une population ?","echantillon"],
           ["En statistique, comment appelle t'on l'objet de l'expérience, de l'individu que l'on étudie?","caractère"],
           ["En statistique, comment appelle t'on un caractère qui ne peut pas être mesuré ?","qualitatif"],
           ["En statistique, comment appelle t'on un caractère qui peut être mesuré ?","quantitatif"]]
     
    # tableau de questions CULTURE G.:
    tb4 = [["En confrontation, comment appelle t'on les points de vue entre les auteurs qui se renforcent ?","convergence"],
           ["En confrontation, comment appelle t'on un point de vue qui est approfondi par un autre ?","complémentarité"],
           ["En confrontation, comment appelle t'on un point de vue qui est nuancé, remis en question partiellement par un autre ?","divergence"]]
     
    # tableau de questions ECO-MANA:
    tb5 = [["Que signifie B2B ?","business to business"],
           ["Que signifie B2C ?","business to consumer"],
           ["Que signifie C2C ?","consumer to consumer"],
           ["Que signifie C2B ?","consumer to business"]]
     
    # tableau de questions DROITS:
    tb6 = [["Comment appelle t'on, l'ensemble de textes qui organise le fonctionnement des institutions et la répartition des pouvoirs et qui affirme les grandes libertés et les grands principes qui fondent le système juridique français ?","constitution"],
           ["Comment appelle t'on une règle juridique écrite et votée par le parlement qui détient le pouvoir l'égislatif ?","loi"]]
     
    # tableau de questions SI:
    tb7 = [["En Python, quelle commande permet l'affichage à l'écran ?","print()"],
           ["En Python, quelle commande permet d'afficher une phrase  et de récupérer une réponse sous forme de chaine de caractère ?","input()"],
           ["En Python, quelle commande permet de transtyper une chaine de caractère en entier ?","int()"],
           ["En Python, quelle commande permet de transtyper une chaine de caractère en réel ?","float()"],
           ["En Python, quelle commande permet de transtyper un nombre en chaine de caractère ?","str()"]]
     
    # tableau réunissant les questions de tous les thèmes.
    tb8 = tb1 + tb2 + tb3 + tb4 +tb5 + tb6 + tb7
     
    # Création de la fenêtre principal.
    fenetre=Tk()
    fenetre.title('Application de révision')
     
    #Création du cadre pour selectionner le thème.
    cadreTheme = Frame(fenetre, borderwidth=2, relief=GROOVE)
    # Affiche le cadreTheme.
    cadreTheme.pack(side=LEFT, padx=10, pady=10)
    # Affiche le titre dans le cadreTheme (qui sert de consigne au sein du cadre).
    Label(cadreTheme, text="Choisir un questionnaire :").pack(padx=10, pady=10)
     
    # Création des radio-boutons avec des valeurs pour choisir quelle matière réviser.
    choix_theme = IntVar(value=0)
    bt1 = Radiobutton(cadreTheme, text="SISR", variable=choix_theme, value=1)
    bt2 = Radiobutton(cadreTheme, text="MATHS", variable=choix_theme, value=2)
    bt3 = Radiobutton(cadreTheme, text="MATHS OPTION", variable=choix_theme, value=3)
    bt4 = Radiobutton(cadreTheme, text="CULTURE G.", variable=choix_theme, value=4)
    bt5 = Radiobutton(cadreTheme, text="ECO-MANA", variable=choix_theme, value=5)
    bt6 = Radiobutton(cadreTheme, text="DROITS", variable=choix_theme, value=6)
    bt7 = Radiobutton(cadreTheme, text="SI", variable=choix_theme, value=7)
    bt8 = Radiobutton(cadreTheme, text="ALL", variable=choix_theme, value=8)
    # Affichage des radio-boutons dans le "cadreTheme".
    bt1.pack()
    bt2.pack()
    bt3.pack()
    bt4.pack()
    bt5.pack()
    bt6.pack()
    bt7.pack()
    bt8.pack()
     
    def resultat_choix():
        choix = (choix_theme.get())
        if choix==1:
            chargeur=tb1
        if choix==2:
            chargeur=tb2
        if choix==3:
            chargeur=tb3
        if choix==4:
            chargeur=tb4
        if choix==5:
            chargeur=tb5
        if choix==6:
            chargeur=tb6
        if choix==7:
            chargeur=tb7
        if choix==8:
            chargeur=tb8
        print(chargeur)
     
    boutonValiderTheme = Button (cadreTheme, text="Valider", command = resultat_choix)
    boutonValiderTheme.pack(padx=10, pady=10)
     
    # Création du cadre pour les questions/Réponses.
    cadreQuestion = Frame(fenetre, borderwidth=2, relief=GROOVE)
    # Affiche le cadreQuestion.
    cadreQuestion.pack(side=BOTTOM, padx=10, pady=10)
    # Affiche le titre dans le cadreQuestion.
    Label(cadreQuestion, text="Question :").pack(padx=10, pady=10)
     
    # Création d'un cadre dans le "cadreQuestion" pour afficher la question.
    cadreAffichageQuestion = Frame(cadreQuestion, bg="white", borderwidth=2, relief=GROOVE)
    # Affiche le cadreAffichageQuestion.
    cadreAffichageQuestion.pack(padx=10, pady=10)
    # Affiche le titre du cadreAffichageQuestion.
    Label(cadreAffichageQuestion, bg="white").pack(padx=10, pady=10)
     
    # Création d'un cadre dans le "cadreQuestion" pour la Réponse.
    cadreReponse = Frame(cadreQuestion, bg="white", borderwidth=2, relief=GROOVE)
    # Affiche le cadreReponse.
    cadreReponse.pack(padx=10)
    # Affiche le titre du cadreReponse.
    Label(cadreReponse, text="Réponse :", bg="white").pack(padx=10, pady=10)
     
    crep = StringVar()
    ligne_texte = Entry(cadreReponse, textvariable=crep, width=30)
    ligne_texte.pack()
     
    def valider_reponse():
        print()
     
    boutonValiderReponse = Button (cadreQuestion, text="Valider", command = valider_reponse)
    boutonValiderReponse.pack(side="left", padx=10)
     
    def question_suivante():
        print()
     
    boutonQuestionSuivante = Button (cadreQuestion, text="Question suivante", command = question_suivante)
    boutonQuestionSuivante.pack(side="right", padx=10)
     
    # Création d'un cadre pour afficher le score.
    cadreScore = Frame(fenetre, borderwidth=2, relief=GROOVE)
    # Affiche le cadreScore.
    cadreScore.pack(side=RIGHT, padx=10, pady=10)
    # Affiche le titre du cadreScore.
    Label(cadreScore, text="Score :").pack(padx=10, pady=10)
     
    # Création d'un cadre dans le "cadreScore" pour Afficher le nombre de bonne réponse.
    cadreVrai = Frame(cadreScore, bg="white", borderwidth=2, relief=GROOVE)
    # Affiche le cadreVrai.
    cadreVrai.pack(side=LEFT, padx=10, pady=10)
    # Affiche le titre du cadreVrai.
    Label(cadreVrai, text="Vrai :", bg="white").pack(padx=10, pady=10)
     
    cpt1 = 0 # Compteur de bonnes réponses
     
    def inc1():
        val = infos['valeur']
        v += 1
        infos['valeur'] = val
     
        my_bonnrep.itemconfig(text, text=int(val))
     
    infos = {'valeur': cpt1, }
     
    my_bonnrep = Canvas(cadreVrai, width=20, height=20)
    my_bonnrep.pack()
    text = my_bonnrep.create_text((10, 10), text=cpt1)
     
    # Création d'un cadre dans le "cadreScore" pour afficher le nombre de mauvaise réponse.
    cadreFaux = Frame(cadreScore, bg="white", borderwidth=2, relief=GROOVE)
    # Affiche le cadreFaux.
    cadreFaux.pack(side=LEFT, padx=10, pady=10)
    # Affiche le titre du cadreFaux.
    Label(cadreFaux, text="Faux :", bg="white").pack(padx=10, pady=10)
     
    cpt2 = 0 # Compteur de mauvaises réponses
     
    def inc2():
        val = infos['valeur']
        v += 1
        infos['valeur'] = val
     
        my_mauvrep.itemconfig(text, text=int(val))
     
    infos = {'valeur': cpt2, }
     
    my_mauvrep = Canvas(cadreFaux, width=20, height=20)
    my_mauvrep.pack()
    text = my_mauvrep.create_text((10, 10), text=cpt2)
     
    # Création d'un cadre dans le "cadreScore" pour afficher le pourcentage de bonne réponse.
    cadreSoit = Frame(cadreScore, bg="white", borderwidth=2, relief=GROOVE)
    # Affiche le cadreSoit.
    cadreSoit.pack(side=LEFT, padx=10, pady=10)
    # Affiche le titre du cadreSoit.
    Label(cadreSoit, text="Soit :", bg="white").pack(padx=10, pady=10)
     
    cpt2 = 0 # Compteur de mauvaises réponses
     
    def inc2():
        val = infos['valeur']
        v += 1
        infos['valeur'] = val
     
        my_mauvrep.itemconfig(text, text=int(val))
     
    infos = {'valeur': cpt2, }
     
    my_mauvrep = Canvas(cadreSoit, width=20, height=20)
    my_mauvrep.pack()
    text = my_mauvrep.create_text((10, 10), text=cpt2)
     
    mainloop()

  7. #7
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Le truc, c'est que les frames tkinter ne sont pas des conteneurs sur lesquels on peut fixer des dimensions, il s"adaptent toujours à ce qu'ils contiennent, peu importe les dimensions que l'on a spécifiées, c'est un comportement très chiant.

    Mais il y a diverses solutions pour contrer ce comportement par défaut, n'utilisant jamais pack, je ne pourrais te dire, mais j'ai déjà vu des solutions utilisant ce layout manager, fais une recherche.

    Ou alors change pour grid que je trouve plus modulable, avis personnel.
    Le temps ronge l'amour comme l'acide.

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

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par bistouille Voir le message
    Le truc, c'est que les frames tkinter ne sont pas des conteneurs sur lesquels on peut fixer des dimensions, il s"adaptent toujours à ce qu'ils contiennent, peu importe les dimensions que l'on a spécifié, c'est un comportement très chiant.
    Il suffit de demander au gestionnaire de placement (pack ou grid) de ne pas propager les dimensions du contenu au contenant.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> from tkinter import *
    >>> frame = Frame(width=500, height=500, bg='blue')
    >>> frame.pack()
    >>> frame.pack_propagate(0)
    >>> btn = Button(frame, text='toto')
    >>> btn.pack()
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Oui, je savais pour grid car je l'ai déjà utilisé, mais comme je ne connaît pas pack du tout, je ne savais pas s'il y avait l'équivalent.

    Merci de l'info
    Le temps ronge l'amour comme l'acide.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2017
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    J'ai fais quelques modification :

    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
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    from tkinter import * # importe la bibliothèque Tkinter qui permet la création d'interfaces graphiques.
     
    from random import * # importe la fonction random qui sert pour le choix aléatoire des questions.
     
    # Création des tableaux (chaque tableau représente un thème):
    # tableau de questions SISR:
    tb1 = [["Que signifie le premier bit d'une adresse MAC quand il est à 0 ?","unicast"],
           ["Que signifie le premier bit d'une adresse MAC quand il est à 1 ?","multicast"],
           ["Que signifie le second bit d'une adresse MAC quand il est à 0 ?","universelle"],
           ["Que signifie le second bit d'une adresse MAC quand il est à 1 ?","local"],
           ["Que représente les bits 3 à 24 d'une adresse MAC ?","identifiant constructeur"],
           ["Que représente les bits 25 à 48 d'une adresse MAC ?","identifiant carte"]]
     
    # tableau de questions MATHS:
    tb2 = [["En numération, comment appelle t'on la base 2 ?","binaire"],
           ["En numération, comment appelle t'on la base 10 ?","décimale"],
           ["En numération, comment appelle t'on la base 16 ?","héxadécimale"],
           ["En numération, comment appelle t'on la notation du signe en binaire (positif ou négatif) ?","signé"]]
     
    # tableau de questions MATHS OPTION:
    tb3 = [["En statistique, comment appelle t'on l'ensemble sur lequel porte une expérience, d'individus ou unité statiques ?","population"],
           ["En statistique, comment appelle t'on une partie (sous ensemble) d'une population ?","echantillon"],
           ["En statistique, comment appelle t'on l'objet de l'expérience, de l'individu que l'on étudie?","caractère"],
           ["En statistique, comment appelle t'on un caractère qui ne peut pas être mesuré ?","qualitatif"],
           ["En statistique, comment appelle t'on un caractère qui peut être mesuré ?","quantitatif"]]
     
    # tableau de questions CULTURE G.:
    tb4 = [["En confrontation, comment appelle t'on les points de vue entre les auteurs qui se renforcent ?","convergence"],
           ["En confrontation, comment appelle t'on un point de vue qui est approfondi par un autre ?","complémentarité"],
           ["En confrontation, comment appelle t'on un point de vue qui est nuancé, remis en question partiellement par un autre ?","divergence"]]
     
    # tableau de questions ECO-MANA:
    tb5 = [["Que signifie B2B ?","business to business"],
           ["Que signifie B2C ?","business to consumer"],
           ["Que signifie C2C ?","consumer to consumer"],
           ["Que signifie C2B ?","consumer to business"]]
     
    # tableau de questions DROITS:
    tb6 = [["Comment appelle t'on, l'ensemble de textes qui organise le fonctionnement des institutions et la répartition des pouvoirs et qui affirme les grandes libertés et les grands principes qui fondent le système juridique français ?","constitution"],
           ["Comment appelle t'on une règle juridique écrite et votée par le parlement qui détient le pouvoir l'égislatif ?","loi"]]
     
    # tableau de questions SI:
    tb7 = [["En Python, quelle commande permet l'affichage à l'écran ?","print()"],
           ["En Python, quelle commande permet d'afficher une phrase  et de récupérer une réponse sous forme de chaine de caractère ?","input()"],
           ["En Python, quelle commande permet de transtyper une chaine de caractère en entier ?","int()"],
           ["En Python, quelle commande permet de transtyper une chaine de caractère en réel ?","float()"],
           ["En Python, quelle commande permet de transtyper un nombre en chaine de caractère ?","str()"]]
     
    # tableau réunissant les questions de tous les thèmes.
    tb8 = tb1 + tb2 + tb3 + tb4 +tb5 + tb6 + tb7
     
    # Création de la fenêtre principal.
    fenetre=Tk()
    fenetre.title('Application de révision')
     
    #Création du cadre pour selectionner le thème.
    cadreTheme = Frame(fenetre, borderwidth=2,relief=GROOVE)
    # Affiche le cadreTheme.
    cadreTheme.grid(row=1, padx=20, pady=10, sticky =W)
    # Affiche le titre dans le cadreTheme (qui sert de consigne au sein du cadre).
    Label(cadreTheme, text="Choisir un questionnaire :").pack(padx=10, pady=10)
     
    # Création des radio-boutons avec des valeurs pour choisir quelle matière réviser.
    choix_theme = IntVar(value=0)
    bt1 = Radiobutton(cadreTheme, text="SISR", variable=choix_theme, value=1)
    bt2 = Radiobutton(cadreTheme, text="MATHS", variable=choix_theme, value=2)
    bt3 = Radiobutton(cadreTheme, text="MATHS OPTION", variable=choix_theme, value=3)
    bt4 = Radiobutton(cadreTheme, text="CULTURE G.", variable=choix_theme, value=4)
    bt5 = Radiobutton(cadreTheme, text="ECO-MANA", variable=choix_theme, value=5)
    bt6 = Radiobutton(cadreTheme, text="DROITS", variable=choix_theme, value=6)
    bt7 = Radiobutton(cadreTheme, text="SI", variable=choix_theme, value=7)
    bt8 = Radiobutton(cadreTheme, text="ALL", variable=choix_theme, value=8)
     
    # Affichage des radio-boutons dans le "cadreTheme".
    bt1.pack()
    bt2.pack()
    bt3.pack()
    bt4.pack()
    bt5.pack()
    bt6.pack()
    bt7.pack()
    bt8.pack()
     
    def resultat_choix():
     
        choix = (choix_theme.get())
        if choix==1:
            chargeur=tb1
        if choix==2:
            chargeur=tb2
        if choix==3:
            chargeur=tb3
        if choix==4:
            chargeur=tb4
        if choix==5:
            chargeur=tb5
        if choix==6:
            chargeur=tb6
        if choix==7:
            chargeur=tb7
        if choix==8:
            chargeur=tb8
        print(chargeur)
     
    # Bouton pour valider le thème choisi.
    boutonValiderTheme = Button (cadreTheme, text="Valider", command = resultat_choix)
    boutonValiderTheme.pack(padx=10, pady=10)
     
    # Création du cadre pour les questions/Réponses.
    cadreQuestion = Frame(width=500, height=500, borderwidth=2, relief=GROOVE)
    # Affiche le cadreQuestion.
    cadreQuestion.grid(row=2, padx=10, pady=10, sticky =S)
    # Affiche le titre dans le cadreQuestion.
    Label(cadreQuestion, text="Question :").pack(padx=10, pady=10)
     
    test=0 # Juste pour tester my_question.
     
    # Canvas pour afficher la question.
    my_question = Canvas(cadreQuestion, width=500, height=300, background='white')
    my_question.pack()
    text = my_question.create_text((10, 10), text=test)
     
    # Création d'un cadre dans le "cadreQuestion" pour la Réponse.
    cadreReponse = Frame(cadreQuestion, borderwidth=2, relief=GROOVE)
    # Affiche le cadreReponse.
    cadreReponse.pack(padx=10)
    # Affiche le titre du cadreReponse.
    Label(cadreReponse, text="Réponse :").pack(padx=10, pady=10)
     
    # Champ permettant de saisir la réponse.
    crep = StringVar()
    ligne_texte = Entry(cadreReponse, textvariable=crep, width=61)
    ligne_texte.pack()
     
    def valider_reponse():
        print()
     
    # Bouton pour valider la réponse.
    boutonValiderReponse = Button (cadreQuestion, text="Valider", command = valider_reponse)
    boutonValiderReponse.pack(side="left", padx=10)
     
    def question_suivante():
        print()
     
    # Bouton pour passer à la question suivante.
    boutonQuestionSuivante = Button (cadreQuestion, text="Question suivante", command = question_suivante)
    boutonQuestionSuivante.pack(side="right", padx=10)
     
    # Création d'un cadre pour afficher le score.
    cadreScore = Frame(fenetre, borderwidth=2, relief=GROOVE)
    # Affiche le cadreScore.
    cadreScore.grid(row=1, column=0, padx=20, sticky =E)
    # Affiche le titre du cadreScore.
    Label(cadreScore, text="Score :").pack(padx=10, pady=10)
     
    # Création d'un cadre dans le "cadreScore" pour Afficher le nombre de bonne réponse.
    cadreVrai = Frame(cadreScore, bg="white", borderwidth=2, relief=GROOVE)
    # Affiche le cadreVrai.
    cadreVrai.pack(side=LEFT, padx=10, pady=10)
    # Affiche le titre du cadreVrai.
    Label(cadreVrai, text="Vrai :", bg="white").pack(padx=10, pady=10)
     
    cpt1 = 0 # Compteur de bonnes réponses
     
    def inc1():
        val = infos['valeur']
        v += 1
        infos['valeur'] = val
     
        my_bonnrep.itemconfig(text, text=int(val))
     
    infos = {'valeur': cpt1, }
     
    my_bonnrep = Canvas(cadreVrai, width=20, height=20)
    my_bonnrep.pack()
    text = my_bonnrep.create_text((10, 10), text=cpt1)
     
    # Création d'un cadre dans le "cadreScore" pour afficher le nombre de mauvaise réponse.
    cadreFaux = Frame(cadreScore, bg="white", borderwidth=2, relief=GROOVE)
    # Affiche le cadreFaux.
    cadreFaux.pack(side=LEFT, padx=10, pady=10)
    # Affiche le titre du cadreFaux.
    Label(cadreFaux, text="Faux :", bg="white").pack(padx=10, pady=10)
     
    cpt2 = 0 # Compteur de mauvaises réponses
     
    def inc2():
        val = infos['valeur']
        v += 1
        infos['valeur'] = val
     
        my_mauvrep.itemconfig(text, text=int(val))
     
    infos = {'valeur': cpt2, }
     
    my_mauvrep = Canvas(cadreFaux, width=20, height=20)
    my_mauvrep.pack()
    text = my_mauvrep.create_text((10, 10), text=cpt2)
     
    # Création d'un cadre dans le "cadreScore" pour afficher le pourcentage de bonne réponse.
    cadreSoit = Frame(cadreScore, bg="white", borderwidth=2, relief=GROOVE)
    # Affiche le cadreSoit.
    cadreSoit.pack(side=LEFT, padx=10, pady=10)
    # Affiche le titre du cadreSoit.
    Label(cadreSoit, text="Soit :", bg="white").pack(padx=10, pady=10)
     
    cpt2 = 0 # Compteur de mauvaises réponses
     
    def inc2():
        val = infos['valeur']
        v += 1
        infos['valeur'] = val
     
        my_mauvrep.itemconfig(text, text=int(val))
     
    infos = {'valeur': cpt2, }
     
    my_mauvrep = Canvas(cadreSoit, width=20, height=20)
    my_mauvrep.pack()
    text = my_mauvrep.create_text((10, 10), text=cpt2)
     
    mainloop()
    Je sais pas si j'ai utilisé les bonnes méthodes mais je trouve qu'il y a du mieux .

  11. #11
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Oui, c'est mieux, mais y'a encore des trucs à régler.

    Maintenant, ton code peut être factorisé en utilisant un dictionnaire pour tes questions.

    De façon à obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    questions = {'SISR':[(question, reponse),
                         (question, reponse),
                         etc.
                         ]
                 'MATHS':[(question, reponse),
                         (question, reponse),
                         etc.
                         ]
                 ETC.
                 }
    Comme ça, pour générer tes radiobutton, une simple boucle suffira (transforme ton IntVar en StringVar).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for domaine in questions.keys() :
        rb = Radiobutton(cadreTheme, text=domaine, variable=choix_theme, value=domaine)
        rb.pack()
    idem pour tout ce qui suivra, l'avantage de faire ainsi, est que si tu ajoutes des domaines de questions dans ta variable questions tu n'auras pas à toucher au reste du code, en ajoutant d'autres radiobuttons, etc.

    Donc ta fonction choix aura juste pour mission de transmettre le domaine choisi à une autre fonction qui s'occupera d'afficher la 1ère question (et éventuellement stocker la réponse dans une variable globale), donc la même qui sera utilisée par ton bouton de la question suivante.

    Ton bouton valider la question, aura pour mission de vérifier si la réponse est bonne et mettre à jour le score.

    C'est un gros résumé, mais dans l'ensemble, ça devrait se résumer à ça pour la base.

    A toi de jouer ^^
    Le temps ronge l'amour comme l'acide.

Discussions similaires

  1. Aide tkinter changer l'aspect d'un bouton
    Par Efkhan gpalu dans le forum Tkinter
    Réponses: 2
    Dernier message: 07/04/2017, 22h28
  2. Réponses: 4
    Dernier message: 05/03/2016, 13h01
  3. [Python 3.X] Aide Tkinter List index out of range
    Par Stephen49330 dans le forum Tkinter
    Réponses: 2
    Dernier message: 15/06/2015, 08h25
  4. Menu "Aide" Tkinter
    Par Tequilapaf dans le forum Tkinter
    Réponses: 4
    Dernier message: 21/07/2009, 12h55
  5. Réponses: 9
    Dernier message: 03/09/2005, 20h51

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