이전 포스팅
2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 8. 엔트리 위젯에 포커스 놓기
이번 포스팅에서는
import tkinter as tk
def focus_in(*args): # 엔트리창에 포커스되는 경우
if id_.get() == placeholder_text: # placegholder가 있으면
entry.delete(0, "end") # 엔트리 값 삭제(시작위치:0, 끝위치:"end")
entry.configure(fg="black") # 글자색(fg-foreground)은 검정색으로
def focus_out(*args): # 엔트리창에 포커스가 떠나는 경우
if not id_.get(): # 엔트리에 값이 입력되어 있지 않으면
entry.configure(fg="gray") # 글자색을 회색으로
entry.insert(0, placeholder_text) # placeholder 재삽입
win = tk.Tk()
placeholder_text = "아이디를 입력하세요"
id_ = tk.StringVar() # 엔트리에 입력하는 값
entry = tk.Entry(win, textvariable=id_, fg="gray") # entry 인스턴스 생성
entry.insert(0, placeholder_text) # entry에 placeholder 삽입
entry.grid(row=0, column=0, padx=20, pady=20) # entry 위치지정, 상하좌우 여백 20px
entry.bind("<FocusIn>", focus_in) # FocusIn 이벤트에 focus_in 함수 바인딩
entry.bind("<FocusOut>", focus_out) # FocusOut 이벤트에 focus_out 함수 바인딩
tk.Button(win, text="확인").grid(row=1, column=0) # 의미없는 버튼 생성..
win.mainloop()
이번 포스팅에서는 다소 고급(?) 예제인 placeholder를 직접 구현해봅니다.
만약 이벤트 바인딩이나 placeholder에 관심이 없으시다면
이 포스팅(코드)은 지금 읽지 않고 넘어가셔도 아무 지장이 없습니다. 정말입니다...
실행화면인 아래 엔트리창의 회색글씨입니다.
설명은 주석으로 대체합니다.
이 정도 기능이면 레이블과 함께 placeholder를 사용해서
멋진 GUI를 구성하실 수 있겠죠?
실행해보면
참고로 스택오버플로에 tkinter의 이벤트 리스트를 잘 정리해놓은 답변이 있어 링크로 남겨둡니다.
다음 포스팅
2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 10. 특정 위젯을 비활성화하기 #도전과제있음
'GUI 튜토리얼 > tkinter 한꼬집씩만 따라해보기' 카테고리의 다른 글
10. 특정 위젯을 비활성화하기 #도전과제있음 (0) | 2022.11.15 |
---|---|
8. 엔트리 위젯에 포커스 놓기 (0) | 2022.11.15 |
7. 엔트리로 입력받은 값 활용하기 #도전과제 (0) | 2022.11.15 |
댓글