Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter에서 place()뿐만 아니라 다양한 지오메트리 매니저로 위젯을 일시적으로 제거하는 방법

Tkinter에서 프레임(Frame)이나 캔버스(Canvas) 안에 위젯을 배치하려면 여러 가지 지오메트리 매니저(Geometry Manager)를 활용할 수 있습니다. 지오메트리 매니저는 위젯의 레이아웃과 Tkinter 창 내에서의 표시 방식을 결정하는 역할을 합니다.

지오메트리 매니저와 place() 메서드

대표적인 지오메트리 매니저로는 pack(), grid(), place() 세 가지가 있습니다. 그중 place() 메서드는 가장 직관적인 방식으로, 위젯의 위치를 창을 기준으로 상대적·절대적으로 명시적으로 지정할 수 있습니다. 또한 relx, rely 같은 상대 좌표 속성을 지원하기 때문에 다른 위젯을 기준으로 위치를 조정하는 것도 가능합니다.

위젯을 일시적으로 제거하는 forget() 메서드

애플리케이션 실행 중 특정 위젯을 화면에서 잠시 숨기고 싶다면 각 지오메트리 매니저에 대응하는 forget 계열 메서드를 사용하면 됩니다.

  • place_forget(): place()로 배치된 위젯 제거
  • pack_forget(): pack()으로 배치된 위젯 제거
  • grid_forget(): grid()로 배치된 위젯 제거

이 메서드들은 위젯 자체를 삭제(destroy)하는 것이 아니라 화면에서만 제거하기 때문에, 나중에 동일한 설정으로 다시 배치(place/pack/grid)하면 언제든 복원할 수 있다는 장점이 있습니다.

예제 코드

아래 예제는 라벨(Label) 위젯을 place()로 배치하고, 버튼을 클릭하면 place_forget()을 호출해 라벨을 화면에서 제거하는 코드입니다.

# 라이브러리 임포트
from tkinter import *

# 윈도우 인스턴스 생성
win = Tk()

# 윈도우 크기 설정
win.geometry("700x300")

def forget_label():
    label.place_forget()

# 라벨 위젯 생성
label = Label(win, text="This is a new Label text", font='Arial 17 bold')
label.place(relx=0.5, rely=0.2, anchor=CENTER)

# 버튼 생성
button = Button(win, text="Remove It", command=forget_label)
button.place(relx=0.5, rely=0.5, anchor=CENTER)

win.mainloop()

실행 결과

위 코드를 실행하면 라벨 위젯과 버튼이 함께 표시된 창이 나타납니다.

Tkinter에서 place()뿐만 아니라 다양한 지오메트리 매니저로 위젯을 일시적으로 제거하는 방법

이후 "Remove It" 버튼을 클릭하면 place_forget()이 호출되어 라벨 위젯이 창에서 사라지는 것을 확인할 수 있습니다.

Tkinter에서 place()뿐만 아니라 다양한 지오메트리 매니저로 위젯을 일시적으로 제거하는 방법

정리

Tkinter에서 위젯을 일시적으로 제거하려면 사용 중인 지오메트리 매니저에 맞는 forget 메서드(place_forget, pack_forget, grid_forget)를 호출하면 됩니다. 이 방식은 위젯 객체를 유지한 채 화면에서만 숨기므로, UI를 동적으로 전환하거나 조건에 따라 요소를 보였다 숨겼다 하는 인터페이스를 만들 때 매우 유용하게 활용됩니다.