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 :

Fenêtre pour réviser


Sujet :

Tkinter Python

  1. #1
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut Fenêtre pour réviser
    Bonjour,

    Cette fois il ne s'agit pas d'un exercice de M. Swinnen, mais d'un petit programme pour moi.

    Le code :
    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
    from dictio import*
    from  tkinter import*
    from random import*
     
     
     
    class Appli_Revis(Frame) :
        def __init__(self) :
            Frame.__init__(self)
            self.master.title('Module de révision')
     
            Button(self,text="Next",width=15,borderwidth=5,relief='raised',
                   command=self.another).grid(row=0,column=2,padx=3,pady=3)
            Button(self,text="Answer",width=15,borderwidth=5,relief='raised',
                   command=self.answer).grid(row=2,column=2,padx=3,pady=3)
            Button(self,text="Grammar",width=15,borderwidth=5,relief='raised',
                   command=self.grammar).grid(row=4,column=2,padx=3,pady=3)
            Button(self,text="To revise",width=15,borderwidth=5,relief='raised',
                   command=self.revise).grid(row=6,column=2,padx=3,pady=3)
            Button(self,text="Quit",width=15,borderwidth=5,relief='raised',
                   command=self.quit).grid(row=8,column=2,padx=3,pady=3)
     
            Label(self,text="To translate").grid(row=1,column=0,padx=3,pady=3)
            self.lab_trans = Label(self,width=40)
            self.lab_trans.grid(row=1,column=1,padx=3,pady=3)
     
            Label(self,text="Proposal").grid(row=3,column=0,padx=3,pady=3)
            self.case_proposal = Entry(self,width=40)
            self.case_proposal.grid(row=3,column=1,padx=3,pady=3)
     
            Label(self,text="Answer").grid(row=5,column=0,padx=3,pady=3)
            self.lab_ans = Label(self,width=40)
            self.lab_ans.grid(row=5,column=1,padx=3,pady=3)
     
            Label(self,text="Counter").grid(row=7,column=0,padx=3,pady=3)
            self.lab_counter = Label(self,width=15)
            self.lab_counter.grid(row=7,column=1,padx=3,pady=3)
     
            self.list_fran = []
            self.list_ang = []
            self.dictio_revis = {}
            self.c = 0
     
            self.liste_fiches = ["Le futur avec will.txt","Past simple.txt"]
     
            self.pack()
     
        def another(self) :
            "Proposition d'un mot/d'une phrase en français, à traduire"
            self.lab_ans.configure(text='')
     
            for fran,ang in voca.items() :
                self.list_fran.append(fran)
                self.list_ang.append(ang)
     
            self.nbre = len(self.list_fran)-1
            self.i = randrange(self.nbre)
            self.lab_trans.configure(text=self.list_fran[self.i])
     
        def answer(self) :
            """Traduction du mot/de la phrase choisie, incrémentation du nbre
    d'erreur, et ajout des éléments à revoir au dictionnaire"""
            self.lab_ans.configure(text=self.list_ang[self.i])
     
            proposal = self.case_proposal.get()
     
            if proposal != self.list_ang[self.i] :
                self.dictio_revis[self.list_fran[self.i]] = self.list_ang[self.i]
                self.c += 1
                self.lab_counter.configure(text=str(self.c))
     
        def revise(self) :
            """Affichage des éléments à revoir"""
            for fran,ang in self.dictio_revis.items() :
                print(fran,":",ang)
     
        def grammar(self) :
            "Affiche une fiche de révision conjugaison/grammaire au hasard"
            nombre = len(self.liste_fiches)-1
            r = randrange(nombre)
            choix = self.liste_fiches[r]
            fichier = open(choix,'r')
            lec = fichier.read()
            print(lec)
            fichier.close()
     
     
     
    if __name__ == "__main__" :
     
        appli = Appli_Revis()
        appli.mainloop()
     
        appli.destroy()
    Il fonctionne , j'ai simplement 3 petites questions :
    1 - dans ma méthode "another", pour générer aléatoirement un mot à traduire, je découpe le dictionnaire en listes, je n'ai pas su faire autrement. Mais peut-être est-il possible d'utiliser randrange sur un dictionnaire ? Je n'ai pas su comment faire, puisqu'avec un dictionnaire on ne peut pas afficher le Xème élément.
    2 - pour mon bouton "grammar", j'affiche dans le shell ma fiche de grammaire/conjugaison. Existe-t-il un module Python qui permette d'ouvrir réellement le fichier, dans son logiciel ? (j'ai cherché sur G, je n'ai rien trouvé qui semble faire ce genre d'opérations)
    3 - quand je clique sur mon bouton "quitter", il me quitte le programme mais une fenêtre vide reste à l'écran. C'est parce que je créé un objet Frame directement ? Comment remédier à cela ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 241
    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 241
    Points : 36 698
    Points
    36 698
    Par défaut
    Salut,

    Citation Envoyé par RowanMayfair Voir le message
    1 - dans ma méthode "another", pour générer aléatoirement un mot à traduire, je découpe le dictionnaire en listes, je n'ai pas su faire autrement.
    Pour transformer un dictionnaire en liste (de tuples), list(voca.items()) aurait suffit.
    De plus, si vous travaillez avec un dictionnaire, choisir une des clefs ou choisir un des tuples (clef, valeur) plutôt que vous trimbaler un index et des listes associées serait plus simple.

    Citation Envoyé par RowanMayfair Voir le message
    2 - Existe-t-il un module Python qui permette d'ouvrir réellement le fichier, dans son logiciel ?
    os.startfile sinon, c'est subprocess.run.

    Citation Envoyé par RowanMayfair Voir le message
    3 - quand je clique sur mon bouton "quitter", il me quitte le programme mais une fenêtre vide reste à l'écran
    .quit est l'opération qui termine le dernier appel à .mainloop.
    Comme dans votre code, il n'y a qu'un appel à mainloop, çà devrait se terminer normalement... mais çà dépend de comment est lancé votre programme (et de quelle fenêtre on parle).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Pour transformer un dictionnaire en liste (de tuples), list(voca.items()) aurait suffit.
    De plus, si vous travaillez avec un dictionnaire, choisir une des clefs ou choisir un des tuples (clef, valeur) plutôt que vous trimbaler un index et des listes associées serait plus simple.
    (...)

    - W
    ah oui mais comment je fais un truc comme ça ? Choisir une clé au hasard dans un dictionnaire ?
    parce que si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.choix = choice(voca.keys())
    évidemment il me répond : 'dict_keys' object does not support indexing
    Alors peut-être que je n'ai pas encore vu comment le faire, je ne sais pas.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 241
    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 241
    Points : 36 698
    Points
    36 698
    Par défaut
    C'est pour çà que j'ai pris le temps de préciser list(dico.items()).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut
    autant pour moi

    alors, en effet j'avais oublié qu'on pouvait aussi facilement transformer un dictionnaire en une jolie liste de tuples. Pas beaucoup utilisé les dictionnaires, c'est l'occasion.
    Donc ça fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def another(self) :
            "Proposition d'un mot/d'une phrase en français, à traduire"
            self.lab_ans.configure(text='')
     
            self.list_dictio = list(voca.items())
            self.list_dictio = choice(self.list_dictio)
     
            self.lab_trans.configure(text=self.list_dictio[0])
    effectivement c'est déjà un peu plus propre.
    En plus, je ne sais pas pourquoi je m'embêtais à utiliser randrange, alors que choice est parfait.

    Ensuite, pour ouvrir mon fichier directement, startfile du module os, c'est le top :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def grammar(self) :
            "Affiche une fiche de révision conjugaison/grammaire au hasard"
            choix = choice(self.liste_fiches)
            startfile(choix)
    ça fonctionne parfaitement. Il me reste plus qu'à en effet saisir mes fiches

    Enfin, pour ce problème de fenêtre qui ne se fermait pas, j'ai rajouté une déf pour mon bouton quitter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def boutQuit(self) :
            self.master.destroy()
    et ça fonctionne maintenant parfaitement.

    Me voilà avec une jolie fenêtre

    Merci Wiztricks

Discussions similaires

  1. Fenêtre pour message d'erreur
    Par javaDev dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 25/04/2007, 12h35
  2. Réponses: 1
    Dernier message: 24/04/2007, 01h55
  3. Réponses: 3
    Dernier message: 20/12/2006, 12h12
  4. Réponses: 2
    Dernier message: 11/12/2006, 21h28
  5. Nouvelle fenêtre pour image
    Par Dimitricus dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2006, 20h04

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