Problème interface

Fermé
MOIII__ Messages postés 3 Date d'inscription vendredi 27 septembre 2019 Statut Membre Dernière intervention 2 octobre 2019 - Modifié le 1 oct. 2019 à 20:34
MOIII__ Messages postés 3 Date d'inscription vendredi 27 septembre 2019 Statut Membre Dernière intervention 2 octobre 2019 - 2 oct. 2019 à 16:05
Bonjour,

J'ai un soucis avec un programme, je veux créer une interface qui me permettrai de faciliter l'apprentissage en anglais (de manière plus amusante), pour cela, on a créer ce petit programme :

from tkinter import *
 

for i in range(0,3):
 
    A = ['to abate','to abide by','to abort']
    F = ['se calmer','respecter','avorter']

    def evaluer(event):
        
        if str(entree)==str(A[i]):
            chaine.configure(text = "Résultat = " + str(A[i]))
        else:
            chaine.configure(text = "Faux, c'est: " + str(A[i]))
 

    fenetre = Tk()
    fenetre.geometry('550x250+300+200')

    entree = Entry(fenetre)
    entree.bind("<Return>", evaluer)
    
    chaine2= Label(fenetre, text='Traduire le mot : ' + F[i] , fg='black')
    chaine = Label(fenetre, fg='red')
    chaine2.pack(side=TOP,padx=5, pady=10)
    entree.pack()
    chaine.pack(side=TOP,padx=5, pady=5)
    
    bou2 = Button(fenetre, text='appuyer une fois avoir validé', command = fenetre.destroy)
    bou2.pack(side=TOP,padx=5, pady=5)
    fenetre.mainloop()



cependant, j'ai un gros souci, il ne fonctionne pas !!! il ne veut pas traiter le cas de la boucle if, et je n'arrive pas à comprendre pourquoi, s'il y en a qui veulent se creuser la tête dessus je suis preneur ^^ . Dans l'attente d'une éventuelle aide, je vous souhaite bonne soirée

EDIT : Déplacement du sujet dans le bon forum
EDIT² : Ajout des balises de code

2 réponses

Bonjour.

Récupérer le texte d'un widget Entry se fait avec sa méthode get.
http://www.effbot.org/tkinterbook/entry.htm#Tkinter.Entry.get-method

Il faudra quand même revoir ton code, car créer puis détruire chaque fenêtre à chaque question posée, ce n'est pas comme ça que l'on doit procéder.

Il faut créer une seule fenêtre, puis agir sur celle-ci et les widgets qui la compose en fonction de ce qu'il doit se passer dans ton application.

Tu débutes, sans doute, mais tant qu'à faire, autant adopter tout de suite de bonnes pratiques.
0
MOIII__ Messages postés 3 Date d'inscription vendredi 27 septembre 2019 Statut Membre Dernière intervention 2 octobre 2019 1
2 oct. 2019 à 16:05
Bonjour,

Merci pour votre réponse,

j'ai finalement réussi à régler mon problème en testant différentes choses hier soir, voici le programme final :

from tkinter import *

for i in range(0,14):

A = ['to attend','to auction','auspicious','available','average','to be averse to','to avert','to avoid','to award','aware','awe','awful','awkward','to go awry']
F = ['assister à','vendre aux enchères','de bon augure','disponible','moyen','être contre','prévenir','éviter qch','décerner','conscient',"sentiment de respect mêlé de crainte et d'admiration",'affreux','maladroit','aller de travers']

def phrase(event):

if str(entree.get())==A[i]:
chaine.configure(text = "Résultat = " + str(A[i]) , fg='green')
else:
chaine.configure(text = "FATAL MISTAKE , c'est: " + str(A[i]) , fg='red')


fenetre = Tk()
fenetre.geometry('550x250+300+200')

entree = Entry(fenetre)
entree.bind("<Return>", phrase)

chaine2= Label(fenetre, text='Traduire le mot : ' + F[i] , fg='black')
chaine = Label(fenetre, fg='red')
chaine2.pack(side=TOP,padx=5, pady=10)
entree.pack()
chaine.pack(side=TOP,padx=5, pady=5)

bou2 = Button(fenetre, text='Appuyer une fois avoir validé', command = fenetre.destroy)
bou2.pack(side=TOP,padx=5, pady=5)
fenetre.mainloop()


Il est vrai que ce n'est pas la façon la plus logique de procéder pour l'apparition des fenêtres mais je voulais tout d'abord finir de créer quelque chose qui fonctionne avant de passer à des améliorations comme l'inversement des deux listes grâce à un bouton pour passer du français à l'anglais. Il est vrai que je débute donc à suivre ...
0