2015-01-07 35 views
5

İki Giriş alanına sahip tkinterde bir giriş penceresi oluşturdum, birincisi Kullanıcı adı ve ikincisi Şifre.
kodTinerde Girişe nasıl yer tutucu eklenir?

from tkinter import * 

ui = Tk() 

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

ui.mainloop() 

ben Entry yılında "Kullanıcı adı" adı verilen bir yer tutucu istiyorum, ama içeride tıklarsanız, metin dissapear gerekir.

+0

Mesaj kodunuzu lütfen. –

+0

Ne denediniz? Stackoverflow'un bir kod yazma hizmeti olması amaçlanmamıştır. –

+0

Cevabım yardımcı olursa, kabul etmeyi unutmayın. :) –

cevap

5

Bu giriş için bir varsayılan değer ayarlamanız gerekir. Bunun gibi: Eğer girdiyi tıkladığınızda içeriği silmek istiyorsanız

from tkinter import * 

ui = Tk() 

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

ui.mainloop() 

Sonra, o zaman bu girdinin içeriğini güncellemek için bir olay işleyicisi yöntemi ile bir fare tıklaması olayı bağlamak zorunda. İşte sizin için bir link.

+5

Bir tıklamaya bağlanmak yerine, klavyeden bir giriş widget'ına odağı değiştirmek mümkün olduğundan, '' öğesine bağlanmanız gerekir. Bunun nasıl yapılacağını gösterirseniz cevabınız biraz daha iyi olur. –

+0

Burada Bryan'ın önerisine dayanarak gelecekteki okuyucular için basit bir astar var: e1.bind ("", lambda args: e1.delete ('0', 'end')) '. – Nae

+0

@Nae bunu ** lambda args için açıklayabilir misiniz: ** daha iyi anlamak istiyorum –

2

aşağıdaki gibi Entry devralan bir sınıf oluşturabilirsiniz:

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

Bu, bind_class, bind_class ile kullanılacak bir özel sınıf etiketi tanımlayarak daha da geliştirilebilir. – Nae