Partage
  • Partager sur Facebook
  • Partager sur Twitter

Texte fantome Tkinter

    4 août 2023 à 12:14:35

    Bonjour,

    Je suis actuellement sur un projet d'application en python utilisant le module Tkinter. J'aimerai savoir si il est possible de mettre dans un widget Entry un genre de texte fantôme qui ne peut pas être sélectionné et qui disparaît dès que l'utilisateur tape quelque chose. Ce texte pourrait aussi réapparaître si l'utilisateur vide le widget un petit à la manière d'un formulaire de connexion sur des sites web.

    Merci d'avance,

    • Partager sur Facebook
    • Partager sur Twitter
      4 août 2023 à 13:53:54

      On devrait pouvoir coder cela avec les possibilités de validation de la saisie ou par la superposition de l'Entry par un Label.

      Vous avez essayé quoi?
      • Partager sur Facebook
      • Partager sur Twitter
        17 août 2023 à 18:29:43

        c'est ce qu'on peut appeler un placeholder; un exemple de code ici https://pythonexamples.org/python-tkinter-entry-placeholder/

        J'ai repris le code en mettant une autre Entry pour que ce soit plus parlant en passant de l'un à l'autre

        import tkinter as tk
        
        # Create the main window
        window = tk.Tk()
        window.title("PythonExamples.org")
        window.geometry("300x200")
        
        # Function to handle the Entry widget focus events
        def on_entry_focus_in(event):
            if entry.get() == placeholder_text:
                entry.delete(0, tk.END)
                #entry.configure(show="")
                entry.configure(fg="black")
        
        def on_entry_focus_out(event):
            if entry.get() == "":
                entry.insert(0, placeholder_text)
                #entry.configure(show="*")
                entry.configure(fg="gray")
        
        # Function to handle the Entry widget focus events
        def on_entry_focus_in2(event):
            if entry2.get() == placeholder_text:
                entry2.delete(0, tk.END)
                #entry2.configure(show="")
                entry2.configure(fg="black")
        
        def on_entry_focus_out2(event):
            if entry2.get() == "":
                entry2.insert(0, placeholder_text)
                #entry2.configure(show="*")
                entry2.configure(fg="gray")
        
        # Create an Entry widget with placeholder text
        placeholder_text = "Enter your input.."
        entry = tk.Entry(window, fg="gray")
        entry.insert(0, placeholder_text)
        entry.bind("<FocusIn>", on_entry_focus_in)
        entry.bind("<FocusOut>", on_entry_focus_out)
        entry.pack()
        
        entry2 = tk.Entry(window, fg="gray")
        entry2.insert(0, placeholder_text)
        entry2.bind("<FocusIn>", on_entry_focus_in2)
        entry2.bind("<FocusOut>", on_entry_focus_out2)
        entry2.pack()
        # Run the application
        window.mainloop()
        



        • Partager sur Facebook
        • Partager sur Twitter
          18 août 2023 à 17:25:03

          umfred a écrit:

          c'est ce qu'on peut appeler un placeholder; un exemple de code ici https://pythonexamples.org/python-tkinter-entry-placeholder/

          Dommage que cet exemple n'utilise pas la validation pour gérer focusin et focusout dont dispose l'Entry. Dommage aussi que le PO ait demandé que le texte disparaisse à l'entrée d'un caractère (et non lorsque le widget à le focus).

          Avec la validation et le masquage, on peut écrire:

          import tkinter as tk
          
          def create_entry(master, prompt):
          
              def on_key(s, p):
                  if len(s) == 0 and len(p) > 0:
                     mask.grid_remove()
                  elif len(p) == 0:
                     mask.grid()
                  return True
          
              vcmd = (master.register(on_key), '%s', '%P')
              entry = tk.Entry(master, validate='key', vcmd=vcmd)
              entry.grid(row=0, column=0)
              
              mask = tk.Label(master, text=prompt, relief='raised', 
          bg='white', fg='grey', anchor='w') mask.grid(row=0, column=0, sticky='we') entry.focus_set() return entry root = tk.Tk() entry = create_entry(root, 'enter text') tk.mainloop()

          on ne s'occupe plus de gérer le contenu de l'Entry mais afficher ou pas le masque suivant le nombre de caractères qu'il contenait ou contiendra.
          Mais il est vrai qu'il faut passer un peu de temps à lire la documentation.

          -
          Edité par mps 18 août 2023 à 20:00:55

          • Partager sur Facebook
          • Partager sur Twitter

          Texte fantome Tkinter

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown