본문 바로가기
Python

[오류] 파이썬 gui _grid

by 콧등치기국수 2020. 9. 26.

오늘은 주말이니 파이썬으로 gui프로그래밍을 집중해서 공부하고 있어요

파이썬으로 알람을 만들어보고싶어서 아주 쥐똥만큼이라도 꾸준히 하려고 노력하고 있습니다.(퇴근하고 공부하기 넘 힘들어ㅠㅠㅠ)

 

grid()로 버튼을 배치하는 것에 대해 공부하고 있는 중 뜬금없이 오류가 났어요!

분명히 강사님과 똑같이 했는데 왜 저만 오류가 났는지 그 원인에 대해 간단히 찾아봤어요.

 

 

  • 내가 친 오류 코드
from tkinter import *

root = Tk()                         
root.geometry("350x430")      

# 15. 스크롤바 : 스크롤바와 대상이 되는 위젯을 하나의 프레임에 넣는게 관리하기 좋다.
frame = Frame(root)
frame.pack()

scrollbar = Scrollbar(frame)
scrollbar.pack(side="right", fill ="y")        # 스크롤바 세로로 꽉 차도록 해줌

# set 없으면 내려가지 않음
listbox = Listbox(frame,selectmode="extended", height =10,yscrollcommand=scrollbar.set)

for i in range(1,32):
    listbox.insert(END, str(i)+"일")
listbox.pack(side="left")

scrollbar.config(command = listbox.yview)

'''
listbox => yscrollcommand = scrollar.set
scrollbar.config(command= listbox.yview)
서로 매핑시켜줘야함
'''

# 17, 18. 그리드
# 애플 키보드 일부분 만들기

btn_f16= Button(root, text="F16")
btn_f17= Button(root, text="F17")
btn_f18= Button(root, text="F18")
btn_f19= Button(root, text="F19")

btn_f16.grid(row=0, column= 0)
btn_f17.grid(row=0, column= 1)
btn_f18.grid(row=0, column= 2)
btn_f19.grid(row=0, column= 3)

root.mainloop()

 

  • 오류내용
tkinter.TclError: cannot use geometry manager grid inside. 
which already has slaves managed by pack

 

pack으로 관리되고 있기때문에 grid를 쓸 수 없다는 걸로 해석이 되는데요

 

stackoverflow에서도 저같은 오류가 난 사람들이 있었기에 그에 대한 답변을 보면

"Never mix grid and pack in the same master window. " 라고 하더라구요.

 

 

그러면 앞에 pack이 있는 스크롤바 내용을 아예 없애버리면 오류가 안날까요?

 

  • 수정 후 코드
from tkinter import *

root = Tk()                         
root.geometry("350x430")      

# 17, 18. 그리드
# 애플 키보드 일부분 만들기

btn_f16= Button(root, text="F16")
btn_f17= Button(root, text="F17")
btn_f18= Button(root, text="F18")
btn_f19= Button(root, text="F19")

btn_f16.grid(row=0, column= 0)
btn_f17.grid(row=0, column= 1)
btn_f18.grid(row=0, column= 2)
btn_f19.grid(row=0, column= 3)

root.mainloop()

 

  • 코드 수정 후 결과

 

pack()을 없애버리니 바로 버튼이 나타나네요!! 세상에...

 

그러면 pack과 grid를 함께 쓰지 못해도 gui로 뭔가 만들 때는 불편함이 없을지 궁금하네요

 

어쨌거나 오류는 해결했지만 나중에 왜 같이 사용하지 못하는지 알아보면 좋을 것 같아요

 

그럼 이만!