개 요
처음 실행하면 나타나는 화면입니다.
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)
여기를 방문하시면 더 많은 파이썬 관련 자료를 확인할 수 있습니다.
'파이썬(Python)' 카테고리의 다른 글
[ 파이썬 한글 자동화 ] 글자 크기 및 폰트(글자체), 진하게 설정하기 (0) | 2022.12.30 |
---|---|
[ 파이썬 한글 자동화 ] 한글 열기(실행하기), 편집 용지 설정하기 (0) | 2022.12.23 |
[ Tkinter ] 파이썬 Tkinter 버튼 비활성화(Disable / Enable Button in TKinter) (0) | 2022.12.11 |
[ Basic ] Python import(파이썬 import) (1) | 2022.12.10 |
[ Tkinter ] 파이썬 Tkinter 버튼 만들기(Python Tkinter Button), 그리드(grid) (0) | 2022.12.06 |