본문 바로가기
GUI 튜토리얼/tkinter 한꼬집씩만 따라해보기

9. 엔트리 위젯에 placeholder 구현하기 #event binding

by 일코 2022. 11. 15.

이전 포스팅

2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 8. 엔트리 위젯에 포커스 놓기

 

8. 엔트리 위젯에 포커스 놓기

import tkinter as tk win = tk.Tk() entry = tk.Entry(win) entry.grid(column=0, row=1, padx=20, pady=20) entry.focus() #

martinii.fun


 

이번 포스팅에서는

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의 이벤트 리스트를 잘 정리해놓은 답변이 있어 링크로 남겨둡니다.

 

List of All Tkinter Events

In Python tkinter module, <Button-1>, <Button-2> and <Button-3> are used to identify mouse button clicks for left, middle and right buttons respectively. Likewise, <KeyPress-R...

stackoverflow.com

 


다음 포스팅

2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 10. 특정 위젯을 비활성화하기 #도전과제있음

 

10. 특정 위젯을 비활성화하기 #도전과제있음

import tkinter as tk win = tk.Tk() button = tk.Button(win, text="클릭못하쥬?") button.grid(row=0, column=0) button.configure(state="disabled") win.mainloop() 위젯을 만들다 보면 편의상 사용자의 입력을 제한하거나 특정 입력이

martinii.fun

 

댓글