[Python + tkinter] LabelFrame 위젯을 사용한 중첩 구조

7623 단어 Tkinter파이썬
첫 게시물입니다 (그리고 마지막이 될 수 있습니다)
Python + tkinter로 GUI 앱을 코딩 할 때 빠졌습니다.
참고서도 읽지 않고 진행하고 있어, 아마 초슈퍼 초보인 이야기인 것입니다만, 모처럼이므로 남겨 두려고 생각합니다.



위 그림과 같이 LabelFrame을 중첩하여 위 1단, 하 2단에 widget을 배치하고 싶고, 아래와 같이 하면 표시가 무너져 곤란했습니다.
※기사에서는 프레임명을 윈도우의 외형에 나타내기 위해(때문에) LabelFrame로 하고 있습니다만, Frame에서도 같습니다. 편집 요청을 주신 분, 감사합니다.

wrong.py
import tkinter as tk
from tkinter import ttk

root = tk.Tk()

frame1 = ttk.LabelFrame(root,text="FRAME1").grid(row=0,column=0)

label1 = ttk.Label(frame1,text="text1").grid(row=0,column=0)

frame2 = ttk.LabelFrame(frame1).grid(row=1,column=0)
entry1 = ttk.Entry(frame2).grid(row=0,column=0)
button1 = ttk.Button(frame2, text="BUTTON1").grid(row=0,column=1)

root.mainloop()


이런 간지

여러가지 조사해 어딘지 모르게 학습했습니다만, 중첩하는 fLabelFrame를, 차례로 닫아야 하는 것 같고, 즉 각각 내포하는 widget를 배치한 뒤로, grid 되어 pack이 되는군요.
그렇게 되어 있지 않은 소스도 산견됩니다만, 특히 중첩하는 경우는, 자신의 환경에서는 (?) 잘 작동하지 않았습니다.

correct.py
import tkinter as tk
from tkinter import ttk

root = tk.Tk()

frame1 = ttk.LabelFrame(root,text="FRAME1")

label1 = ttk.Label(frame1,text="text1").grid(row=0,column=0)

frame2 = ttk.LabelFrame(frame1,text="FRAME2")
entry1 = ttk.Entry(frame2).grid(row=0,column=0)
button1 = ttk.Button(frame2, text="BUTTON1").grid(row=0,column=1)

frame2.grid(row=1,column=0)     #frame2を配置(綴じる)
frame1.grid(row=0,column=0)     #frame1を配置(綴じる)

root.mainloop()

나처럼 슈퍼 초보인 분의 참고가 되면.

좋은 웹페이지 즐겨찾기