2015-01-07 5 views
5

두 개의 입력 필드가있는 tkinter에서 로그인 창을 만들었습니다. 첫 번째 입력란은 사용자 이름이고 두 번째 입력란은 암호입니다.
코드tkinter의 항목에 자리 표시자를 추가하는 방법은 무엇입니까?

from tkinter import * 

ui = Tk() 

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

ui.mainloop() 

나는 Entry에서 "사용자 이름"이라는 자리를 원하지만 내부를 클릭하면 텍스트가 퀘스 트 로그에서 사라질 것이다.

+0

포스트 코드를하시기 바랍니다. –

+0

무엇을 시도 했습니까? Stackoverflow는 코드 작성 서비스가 아닙니다. 내 대답에 도움이된다면 –

+0

을 수락하는 것을 잊지 마십시오. :) –

답변

5

이 항목의 기본값을 설정해야합니다. 이처럼 : 당신이 항목을 클릭하면 내용을 삭제하려면

from tkinter import * 

ui = Tk() 

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

ui.mainloop() 

그런 다음, 당신은이 항목의 내용을 업데이트하는 이벤트 핸들러 방법 마우스 클릭 이벤트를 바인딩해야합니다. 여기에 link이 있습니다.

+5

클릭으로 바인딩하는 대신 키보드를 통해 입력 위젯으로 포커스를 전환 할 수 있으므로 ''에 바인딩해야합니다. 실제로 그렇게하는 방법을 보여 주면 대답은 조금 나아질 것입니다. –

+0

여기에 브라이언의 제안에 따라 미래의 독자들에게 간단한 라이너입니다 : (: e1.delete ('0', '끝') "", 람다 인수를)''e1.bind. – Nae

+0

는 @Nae 당신은 ** 람다 인수에 대한이 설명 할 수하십시오 ** 내가'args'가 왜 기본적으로 해당 콜백 버튼에'event' 값을 전달 bind' 더 나은 –

2

당신은 아래와 같이 Entry에서 상속하는 클래스를 만들 수 있습니다

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

bindtags, bind_class와 함께 사용할 사용자 정의 클래스 태그를 정의하면이 점을 더욱 향상시킬 수 있습니다. – Nae

관련 문제