본문 바로가기
Python

tkinter - 입력란 내용 없으면 버튼 비활성화

by 앗사비 2023. 5. 11.
728x90

예제에 따라 bind와 trace가 섞여있어서 햇갈렸으나 trace가 더 적절하다고 판단됨

구글 바드에 의하면 차이가 이렇다

bind와 trace는 모두 Tkinter에서 이벤트에 응답하는 데 사용되는 메서드이지만 작동 방식이 다릅니다. bind 메서드는 이벤트와 이벤트에 대한 응답으로 호출되는 함수를 연결하는 데 사용됩니다. trace 메서드는 변수의 값이 변경될 때마다 호출되는 함수를 연결하는 데 사용됩니다.

 

버튼 배치의 경우 그리드와 팩이 있는데 여기서는 팩 사용 (출처 : 뤼튼)

pack(): pack은 요소를 부모 위젯 안에서 가능한 한 작은 공간에 맞추어 배치합니다. 위젯들은 기본적으로 상단에서 아래로 쌓이며, 옵션으로 왼쪽에서 오른쪽으로 배치할 수도 있습니다. pack은 간단한 인터페이스에 적합하지만, 복잡한 배치를 제어하기에는 한계가 있습니다.

grid(): grid는 부모 위젯을 행과 열로 나눈 격자에 위젯을 배치합니다. 각 위젯의 행과 열의 인덱스를 지정하여 원하는 위치에 배치할 수 있습니다. grid는 복잡한 인터페이스와 정렬에 더 적합하며, 행과 열의 인덱스를 이용하여 직관적으로 배치할 수 있습니다.

 

 

import tkinter as tk

window = tk.Tk()
entry_var = tk.StringVar()


def on_entry_change(*args):
    if entry_var.get():
        button_OK.configure(state="normal")
    else:
        button_OK.configure(state="disabled")


def on_button_click():
    print(entry_var.get())


entry = tk.Entry(window, textvariable=entry_var)
entry.pack()
entry_var.trace("w", on_entry_change)

button_OK = tk.Button(window, text="OK", command=on_button_click, state="disabled")
button_OK.pack()

window.mainloop()
728x90

'Python' 카테고리의 다른 글

파이썬 SSL 오류 발생시  (0) 2023.07.12
amazon linux 2 - 파이썬 3.11 설치  (0) 2023.07.10
판다스 치트시트  (0) 2023.04.27
비동기로 웹크롤링  (0) 2023.04.01
[장고] 알아두면 좋은 내용  (0) 2023.02.14