2015-01-07 16 views
5

Ich habe ein Login-Fenster in tkinter erstellt, das zwei Eingabefelder hat, das erste ist Benutzername und das zweite ist Passwort.
CodeWie Platzhalter zu einem Eintrag in tkinter hinzufügen?

from tkinter import * 

ui = Tk() 

e1 = Entry(ui) 
#i need a placeholder "Username" in the above entry field 
e1.pack() 

ui.mainloop() 

ich einen Platzhalter will im Entry "Benutzername", aber wenn Sie in klicken, sollte der Text verschwinden.

+0

Post Code bitte. –

+0

Was hast du probiert? Stackoverflow ist kein Code-Schreibdienst. –

+0

Wenn meine Antwort hilft, vergiss nicht, sie zu akzeptieren. :) –

Antwort

5

Sie müssen einen Standardwert für diesen Eintrag festlegen. Wie folgt aus:

from tkinter import * 

ui = Tk() 

e1 = Entry(ui) 
e1.insert(0, 'username') 
e1.pack() 

ui.mainloop() 

Dann, wenn Sie den Inhalt löschen möchten, wenn Sie den Eintrag klicken, dann haben Sie ein Mausklickereignis mit einem Event-Handler-Methode zu binden Inhalt dieses Eintrags zu aktualisieren. Hier ist ein link für Sie.

+5

Anstatt an einen Klick zu binden, sollten Sie an '' binden, da es möglich ist, den Fokus über die Tastatur auf ein Eingabe-Widget zu setzen. Ihre Antwort wäre ein bisschen besser, wenn Sie tatsächlich zeigen würden, wie das geht. –

+0

Hier ist ein einfacher Liner für zukünftige Leser, basierend auf Bryans Vorschlag: 'e1.bind (" ", Lambda-Argumente: e1.delete ('0', 'end'))'. – Nae

+0

@Nae bitte können Sie dies für ** Lambda Args erklären: ** Ich möchte besser verstehen –

2

Sie können eine Klasse erstellen, die von Entry wie unten erbt:

import tkinter as tk 

class EntryWithPlaceholder(tk.Entry): 
    def __init__(self, master=None, placeholder="PLACEHOLDER", color='grey'): 
     super().__init__(master) 

     self.placeholder = placeholder 
     self.placeholder_color = color 
     self.default_fg_color = self['fg'] 

     self.bind("<FocusIn>", self.foc_in) 
     self.bind("<FocusOut>", self.foc_out) 

     self.put_placeholder() 

    def put_placeholder(self): 
     self.insert(0, self.placeholder) 
     self['fg'] = self.placeholder_color 

    def foc_in(self, *args): 
     if self['fg'] == self.placeholder_color: 
      self.delete('0', 'end') 
      self['fg'] = self.default_fg_color 

    def foc_out(self, *args): 
     if not self.get(): 
      self.put_placeholder() 

if __name__ == "__main__": 
    root = tk.Tk() 

    username = EntryWithPlaceholder(root, "username") 
    password = EntryWithPlaceholder(root, "password", 'blue') 
    username.pack() 
    password.pack() 
    root.mainloop() 
+0

Dies könnte weiter verbessert werden, indem ein benutzerdefiniertes Klassen-Tag definiert wird, das mit Bindtags, bind_class, verwendet wird. – Nae

Verwandte Themen