Récupérer du texte à partir d'un champ de saisie sur tkinter

Résolu
manyonne Messages postés 4 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Ce problème n'est pas sans solution sur internet, qui exigent la création d'une nouvelle classe. Cependant, je ne peux pas le faire à cause d'une contrainte.
J'ai passé beaucoup de temps à essayer différentes solutions, mais malheureusement je suis bloqué.
je vous fourni le code ainsi que son résultat.
En espérant que quelqu'un pourra m'aider.
(le temps me fait défaut et donc je m'en remets à vous)



Configuration: Windows / Opera 82.0.4227.50

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Merci de copier coller ton texte en le mettant en forme avec les balises de code plutôt que d'utiliser une capture d'écran, ce sera plus pratique pour tout le monde et plus écologique.

    Explication rapide

    Tu confonds dans ton code deux étapes :
    • celle où tu places les éléments dans ta fenêtre (par exemple, les champs texte, les boutons...)
    • et celle où tu traites les données saisies (suite à un événement, par exemple, quand tu cliques sur un bouton ou quand tu appuies sur une touche de clavier).


    Explication détaillée

    Généralement, on aura effectivement à faire une classe pour une fenêtre, et cet objet contient les éléments contenus dans cette fenêtre, mais ça n'est pas obligatoire.

    L'exemple "calculator" proposé dans ce lien montre comment faire :

    #!/usr/bin/env python3
    
    import tkinter as tk
    from math import *
    
    def evaluate(event):
        res.configure(text = "Result: " + str(eval(entry.get())))
        
    w = tk.Tk()
    tk.Label(w, text="Your Expression:").pack()
    entry = tk.Entry(w)
    entry.bind("<Return>", evaluate)
    entry.pack()
    res = tk.Label(w)
    res.pack()
    w.mainloop()


    Que fait ce programme ?
    • On commence par créer une fenêtre
      w
      , dans laquelle on installe un texte (
      tk.Label
      ) et un champ (
      tk.Entry
      ) pour saisir une valeur.
    • Ensuite, à l'aide de la méthode
      bind
      , on indique que la fonction
      evaluate
      doit être appelée à chaque fois que l'utilisateur appuie sur la touche Entrée.
    • Puis on crée dans
      w
      un champ texte
      res
      dont le contenu sera corrigé par la fonction
      evaluate
      . La fonction
      evaluate
      est appelée callback, car elle est passée en paramètre d'une autre fonction (en l'occurrence,
      bind
      ).
    • Enfin, Une fois que le comportement complet de la fenêtre est spécifié, on lance le programme a proprement parler avec
      w.mainloop()
      .


    Note que toutes ces variables sont déclarées en dehors d'une classe, ce qui montre bien que ça n'est pas indispensable (même si je ne vois pas trop pourquoi tu ne pourrais pas utiliser une classe dans ton cas, mais peu importe).

    Tu vois donc que la déclaration de la fenêtre à proprement parler (le programme principal) et le traitement qui est fait (la callback
    evaluate
    ) sont donc séparés. Cette distinction est incontournable, et comme elle n'est pas faite dans le bout de code que tu as partagé, c'est pour cela que ce dernier ne marche pas.

    Bonne chance
    0