파이썬(Python)

[ Tkinter ] 파이썬 Tkinter 위젯(버튼 등) 숨기기 / 보여주기(Hide / Show Widget in TKinter)

카루루1007 2022. 12. 12. 23:07
728x90
반응형
SMALL
개    요

처음 실행하면 나타나는 화면입니다.

3개의 프레임을 만들고,

프레임마다 버튼을 넣어놓았습니다.

 

[ hide 버튼 ]을 누르면 

두번째 프레임(button 4 ~ button 6)이 숨겨지고

 

[ show 버튼 ]을 누르면

두번째 프레임(button 4 ~ button 6)이 다시 나타납니다.

 

전체코드

from tkinter import *

root = Tk()

def hide_frame(q):
    q.grid_remove()

def show_frame(q):
    q.grid()

mainframe = Frame(root, padx=5, pady=5)
mainframe.grid(column=0, row=0)

secframe = Frame(root)
secframe.grid(column=0, row=1)

thirframe = Frame(root, padx=5, pady=5)
thirframe.grid(column=0, row=2)

a = Button(mainframe, text="button 1")
a.grid(column=0, row=0)
b = Button(mainframe, text="button 2")
b.grid(column=1, row=0)
c = Button(mainframe, text="button 3")
c.grid(column=2, row=0)

d = Button(secframe, text="button 4")
d.grid(column=0, row=0)
e = Button(secframe, text="button 5")
e.grid(column=1, row=0)
f = Button(secframe, text="button 6")
f.grid(column=2, row=0)

g = Button(thirframe, text="hide", command=lambda : hide_frame(secframe))
g.grid(column=0, row=0)
h = Button(thirframe, text="show", command=lambda : show_frame(secframe))
h.grid(column=1, row=0)

root.mainloop()

 

숨기기 / 보여주기(Hide and Show)

 

숨기는 방법은

gird() → grid_forget() / grid_remove()

pack() → pack_forget()

place() → place_forget()

함수를 사용하면 됩니다.

tkinter의 __init__.py 파일을 보면
grid_forget() / grid_remove() 모두 숨기는 역할을 하는 것 같으나,
grid_remove() 는 그리드의 옵션을 기억한다고 합니다.

여기서는 grid_remove()를 사용했습니다.

pack() 과 place()의 경우 pack_forget() / place_forget() 함수만 있는 것 같습니다.

 

def hide_frame(q):
    q.grid_remove()

def show_frame(q):
    q.grid()

º

º

º

g = Button(thirframe, text="hide", command=lambda : hide_frame(secframe))
g.grid(column=0, row=0)


h = Button(thirframe, text="show", command=lambda : show_frame(secframe))
h.grid(column=1, row=0)

 

버튼의  command 에 lamda를 사용해 secframe(두번째 프레임)을

인자로 전달하여 함수를 호출했습니다.

 

hide_frame() 함수에서 프레임을 숨기고

show_frame() 함수에서 프레임을 다시 보여줍니다.

 

다시 보여줄 때에는 

grid() / pack() / place() 를 사용합니다.

반응형
grid_remove() / grid_forget() 차이

앞서 grid_remove() 는 옵션을 기억한다고 했습니다.

def hide_frame(q):
    q.grid_forget()

def show_frame(q):
    q.grid()

 

빨간색 부분을 grid_remove()에서 grid_forget()으로 바꾸었습니다.

결과를 보겠습니다.

먼저 [ hide ]버튼을 눌러서 숨겼습니다.

이상태로 [ show ]버튼을 눌러보겠습니다.

새로운 프레임이 생성되는 것으로 인식하여

기존의 프레임 뒤로 새 프레임이 생성되는 것으로 보입니다.

원하는 모양으로 생성되게 하려면

grid() 함수를 통해 프레임을 다시 불러올 때

아래 코드와 같이 column과 row를 정해주어야 합니다.

 

def hide_frame(q):
    q.grid_forget()

def show_frame(q):
    q.grid(column=0, row=1)

728x90
반응형
LIST