2015-01-07 16 views
5

Ho creato una finestra di login in tkinter che ha due campi Entry, il primo è Username e il secondo è Password.
codiceCome aggiungere segnaposto a una voce in tkinter?

from tkinter import * 

ui = Tk() 

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

ui.mainloop() 

Voglio un segnaposto chiamato "Nome utente" nel Entry, ma se si fa clic all'interno, il testo dovrebbe scomparire.

+0

Inserisci il codice per favore. –

+0

Cosa hai provato? Stackoverflow non è destinato a essere un servizio di scrittura del codice. –

+0

se la mia risposta aiuta, non dimenticare di accettarlo. :) –

risposta

5

È necessario impostare un valore predefinito per questa voce. Come questo:

from tkinter import * 

ui = Tk() 

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

ui.mainloop() 

Poi, se si desidera eliminare il contenuto quando si fa clic sulla voce, poi si deve associare un evento click del mouse con un metodo del gestore eventi per aggiornare il contenuto di questa voce. Ecco un link per voi.

+5

Invece di vincolare a un clic, è necessario eseguire il binding a '', poiché è possibile passare a un widget di immissione tramite la tastiera. La tua risposta sarebbe un po 'meglio se in realtà hai mostrato come farlo. –

+0

Ecco una semplice copertina per i futuri lettori basata sul suggerimento di Bryan: 'e1.bind (" ", lambda args: e1.delete ('0', 'end'))'. – Nae

+0

@Nae per favore puoi spiegarlo per ** lambda args: ** voglio capire meglio –

2

È possibile creare una classe che eredita da Entry come di seguito:

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

Questo potrebbe essere ulteriormente migliorato definendo un tag di classe personalizzato da utilizzare con bindtags, bind_class. – Nae

Problemi correlati