본문 바로가기
프로그래밍/파이썬

[파이썬 GUI] tkinter 6(특정 키를 누를 때 동작하는 bind함수/로그인 창 음영 넣는 법)

by 인성패밀리 2022. 10. 28.
반응형

특정 키를 누를 때 동작할 수 있게 만드는 bind 함수에 대해서 알아보겠습니다. bind 함수는 위젯에 적용시킬 수 있습니다. 여기서 위젯이란 Label, Entry, Button 등을 모두 위젯이라고 하고 프로그램 화면에 보이는 대부분이 위젯이라고 볼 수 있습니다.

 

기본적으로 사용하는 방법을 알아보고 로그인 창에서 볼 수 있는 입력을 유도하는 음영을 표현해보겠습니다.

 

1. 기본 사용 방법

2. 로그인 창 입력 유도를 위한 음영 넣기

 

1. 기본 사용 방법

from tkinter import *


def mouse_left_click(event):
    # 반드시 event 매개변수를 전달합니다.
    global label1
    label1['text'] = "누르면 이렇게 변함"
    
    # 뭐가 들어오는지 확인해보자!
    print(event)

gui = Tk()
gui.title("뭔가 눌렀을 때 동작하는 bind")
gui.geometry("400x300+300+300")

label1 = Label(gui, text="여기 클릭하면 변한다?", font=('굴림', 30))
label1.pack()

# bind 함수 기본 사용방법
# 위젯.bind(어떤 키?, 어떤 키를 누를 때 동작될 함수)
# 그러면 위쪽으로 올라가서 함수를 만들어 줍니다.
label1.bind("<Button-1>", mouse_left_click)

gui.mainloop()

실행 결과

클릭 전
클릭 후

label1.bind("<Button-1>", mouse_left_click)

-> <Button-1>은 마우스 왼쪽 버튼을 의미합니다.

-> 키보드의 키를 눌렀을 때로 하고 싶으면 <Key>를 문자열로 넣으면 됩니다.

-> 키보드의 특수키 예를 들면 backspace 같은 키들은 따로 있습니다. 

-> 우선 사용하는 방법이 제일 중요합니다.

-> 원하는 옵션들은 파이썬 공식 문서를 참고하시면 좋을 거 같습니다.

 

def mouse_left_click(event):

-> bind를 사용하는 함수는 반드시 매개변수를 하나 전달해야합니다.

-> 보통은 event 라는 이름을 사용합니다.

-> 어떤 키를 클릭하냐에 따라서 event 변수의 내용이 달라집니다.

 

 

2. 로그인 창 입력 유도를 위한 음영 넣기

from tkinter import *


def id_click(event):
    global input1
    val = input1.get()
    if val == "ID":
        input1.delete(0, 2)
        input1['fg'] = 'black'
    elif val == "":
        input1['fg'] = 'gray'
        input1.insert(0, "ID")


def pw_click(event):
    global input2
    val = input2.get()
    if input2.get() == "PW":
        input2.delete(0, 2)
        input2['fg'] = 'black'
    elif val == "":
        input2['fg'] = 'gray'
        input2.insert(0, "PW")


gui = Tk()
gui.title("뭔가 눌렀을 때 동작하는 bind")
gui.geometry("400x300+300+300")

input1 = Entry(gui, width=15, font=('consolas', 20), fg='gray')
input2 = Entry(gui, width=15, font=('consolas', 20), fg='gray')

input1.pack(pady=5)
input2.pack(pady=5)

input1.insert(0, "ID")
input2.insert(0, "PW")

input1.bind("<Button-1>", id_click)
input2.bind("<Button-1>", pw_click)

gui.mainloop()

간단하게 이렇게 사용해 볼 수 있을 것 같습니다. 조금 더 완벽하게 하려면 Frame에 Entry를 넣고하면 조금 더 자연스럽지 않을 까 생각합니다.

 

bind 함수는 다양한 방법으로 응용될 수 있을 것입니다. 사용하고자 하는 기능을 잘 추가해보시길 바랍니다.

반응형

댓글