Tkinter LabelFrame

2024. 3. 7. 20:26GUI/tkinter

요약 : 이 튜토리얼에서는 다른 위젯이 포함된 Tkinter LabelFrame 위젯을 사용하는 방법을 설명합니다.

Tkinter LabelFrame 소개

Tkinter LabelFrame 위젯은 다른 관련 위젯을 포함하는 컨테이너입니다. 예를 들어 라디오버튼 위젯을 그룹화하고, 그 그룹을 LabelFrame에 위치할 수 있습니다.

LabelFrame 위젯을 만들려면, 다음을 사용합니다

lf = ttk.LabelFrame(container, **option)

이 구문에서는 LabelFrame의 상위 구성 요소(container)와 하나 이상의 옵션을 지정합니다. 주목할만한 옵션은 LabelFrame를 위한 레이블을 지정하는 text 입니다.

Tkinter LabelFrame 위젯 예

다음 프로그램은 세 개의 라디오 버튼을 그룹화하는 LabelFrame 위젯을 만드는 방법을 보여줍니다.

In [1]:
import tkinter as tk
from tkinter import ttk

# root window
root = tk.Tk()

# configure the root window
root.geometry('300x200')
root.resizable(False, False)
root.title('LabelFrame Demo')

# label frame
lf = ttk.LabelFrame(root, text='Alignment')
lf.grid(column=0, row=0, padx=20, pady=20)

alignment_var = tk.StringVar()
alignments = ('Left', 'Center', 'Right')

# create radio buttons and place them on the label frame

grid_column = 0
for alignment in alignments:
    # create a radio button
    radio = ttk.Radiobutton(lf, text=alignment, value=alignment, variable=alignment_var)
    radio.grid(column=grid_column, row=0, ipadx=10, ipady=10)
    # grid column
    grid_column += 1

root.mainloop()

 

 

동작 방식.

먼저 LabelFrame 위젯을 만들고 그리드 지오메트리 관리자를 사용하여 레이아웃을 관리합니다.

lf = ttk.LabelFrame(root, text='Alignment')
lf.grid(column=0, row=0, padx=20, pady=20)

둘째, 정렬 목록을 기반으로 3개의 라디오 버튼 위젯을 생성하고 라벨 프레임 위젯에 배치합니다.

grid_column = 0

for alignment in alignments:
     # create a radio button
     radio = ttk.Radiobutton(lf, text=alignment, value=alignment, variable=alignment_var)
     radio.grid(column=grid_column, row=0, ipadx=10, ipady=10)
     # grid column
     grid_column += 1

라벨 위치 지정

위젯에서 레이블 위치를 지정하려면 labelanchor 옵션을 사용합니다. labelanchor의 기본값은 상단 테두리의 왼쪽 끝에 레이블을 배치하는 'nw' 입니다.

 

 

다음 프로그램은 레이블 앵커 옵션을 보여줍니다. 레이블 옵션을 선택하면 LabelFrame 위젯의 레이블이 그에 따라 변경됩니다.
 

 

import tkinter as tk
from tkinter import ttk

# root window
root = tk.Tk()
root.title('LabelFrame Label Anchor')

# label frame
lf = ttk.LabelFrame(root, text='Label Anchor')
lf.grid(column=0, row=0, padx=20, pady=20, sticky=tk.NSEW)

anchor_var = tk.StringVar()
anchors = {
    'nw': {'row': 0, 'column': 1},
    'n': {'row': 0, 'column': 2},
    'ne': {'row': 0, 'column': 3},
    'en': {'row': 1, 'column': 4},
    'e': {'row': 2, 'column': 4},
    'es': {'row': 3, 'column': 4},
    'se': {'row': 4, 'column': 3},
    's': {'row': 4, 'column': 2},
    'sw': {'row': 4, 'column': 1},
    'ws': {'row': 3, 'column': 0},
    'w': {'row': 2, 'column': 0},
    'wn': {'row': 1, 'column': 0}
}


def change_label_anchor():
    lf['labelanchor'] = anchor_var.get()


# create radio buttons and place them on the label frame
for key, value in anchors.items():
    # create a radio button
    radio = ttk.Radiobutton(
        lf,
        text=key.upper(),
        value=key,
        command=change_label_anchor,
        variable=anchor_var
    ).grid(**value, padx=10, pady=10, sticky=tk.NSEW)

# set the radio button selected
anchor_var.set(lf['labelanchor'])

# show the root window
root.mainloop()

동작 방식.

먼저 LabelFrame 위젯을 생성하고 루트 창에 배치합니다.

lf = ttk.LabelFrame(root, text='Label Anchor')
lf.grid(column=0, row=0, padx=20, pady=20, sticky=tk.NSEW)

다음으로 라디오 버튼과 연결할 StringVar 객체를 정의합니다.

anchor_var = tk.StringVar()

그런 다음 키가 레이블 옵션을 저장하고 값이 그리드의 셀(행, 열)을 저장하는 사전을 정의합니다.

anchors = {
     'nw': {'row': 0, 'column': 1},
     'n': {'row': 0, 'column': 2},
     'ne': {'row': 0, 'column': 3},
     'en': {'row': 1, 'column': 4},
     'e': {'row': 2, 'column': 4},
     'es': {'row': 3, 'column': 4},
     'se': {'row': 4, 'column': 3},
     's': {'row': 4, 'column': 2},
     'sw': {'row': 4, 'column': 1},
     'ws': {'row': 3, 'column': 0},
     'w': {'row': 2, 'column': 0},
     'wn': {'row': 1, 'column': 0}
}

그런 다음 라디오 버튼 변경 이벤트를 처리하는 함수를 정의합니다. 이 함수는 LabelFrame 위젯의 labelanchor 옵션을 선택한 라디오 버튼의 값으로 변경합니다.

def change_label_anchor():
     lf['labelanchor'] = anchor_var.get()

마지막으로 anchors 사전에서 라디오 버튼을 생성하고 LabelFrame 위젯에 배치합니다.

for key, value in anchors.items():
     # create a radio button
     radio = ttk.Radiobutton(
         lf,
         text=key.upper(),
         value=key,
         command=change_label_anchor,
         variable=anchor_var
     ).grid(**value, padx=10, pady=10, sticky=tk.NSEW)

요약

  • 관련 위젯을 하나의 그룹으로 그룹화하려면 LabelFrame 위젯을 사용하세요.
  • LabelFrame 위젯을 생성하는데 ttk.LabelFrame(container, **option)을 사용합니다.

 

출처 : https://www.pythontutorial.net/tkinter/tkinter-labelframe/

'GUI > tkinter' 카테고리의 다른 글

Tkinter Notebook  (0) 2024.03.09
Tkinter Progressbar  (0) 2024.03.08
Tkinter Sizegrip  (0) 2024.03.06
Tkinter Spinbox  (0) 2024.03.05
Tkinter Slider  (0) 2024.03.04