애플리케이션에서 탭(Tab)을 활용해 작업 흐름을 구분하고 싶다면, Tkinter가 제공하는 Notebook 위젯을 사용할 수 있습니다. Notebook 위젯을 이용하면 애플리케이션 안에 여러 개의 탭을 손쉽게 만들 수 있으며, 각 탭은 특정 프레임이나 기능을 독립적으로 분리해 보여주는 역할을 합니다.
일반적으로 Notebook 위젯은 ttk 테마 위젯을 통해 구성하고 스타일링합니다. Notebook 위젯의 스타일을 지정하려면 설정 과정에서 TNotebook과 TNotebook.Tab 매개변수를 전달하면 됩니다.
그런데 탭을 클릭했을 때 탭 주위에 사각형 모양의 점선(dashed line)이 나타나는 경우가 있습니다. 이는 포커스(focus) 상태를 시각적으로 표시하는 요소인데, 스타일 레이아웃을 재정의하면 깔끔하게 제거할 수 있습니다.
예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk
# tkinter 프레임 인스턴스 생성
win = Tk()
win.geometry("700x350")
# ttk 스타일 인스턴스 생성
style = ttk.Style()
# Notebook 위젯의 스타일 레이아웃 정의
style.layout("Tab", [('Notebook.tab', {'sticky': 'nswe', 'children':
[('Notebook.padding', {'side': 'top', 'sticky': 'nswe', 'children':
[('Notebook.label', {'side': 'top', 'sticky': ''})],
})],
})]
)
# 정의한 스타일을 적용하여 탭의 점선 제거
style.configure("Tab", focuscolor=style.configure(".")["background"])
# Notebook 위젯 생성
my_notebook = ttk.Notebook(win)
my_notebook.pack(expand=1, fill=BOTH)
# 탭 생성
tab1 = ttk.Frame(my_notebook)
my_notebook.add(tab1, text="Tab 1")
tab2 = ttk.Frame(my_notebook)
my_notebook.add(tab2, text="Tab 2")
# 각 탭에 라벨 추가
Label(tab1, text="Hello, Howdy?",
font=('Helvetica 20 bold')).pack()
Label(tab2, text="This is a New Tab Context",
font=('Helvetica 20 bold')).pack()
win.mainloop()실행 결과
위 코드를 실행하면 여러 개의 탭이 포함된 창이 화면에 나타납니다.

창에서 다른 탭으로 전환하면 해당 탭의 내용이 표시되며, 이전에는 보이던 사각형 점선이 더 이상 나타나지 않는 것을 확인할 수 있습니다.

핵심 포인트 정리
점선이 생기는 원인은 탭이 포커스를 받을 때 표시되는 focuscolor 때문입니다. style.layout()으로 탭의 내부 구조를 재정의하고, focuscolor를 배경색과 동일하게 설정하면 포커스 표시가 배경과 같아져 점선이 사라지게 됩니다. 이 기법은 탭 UI를 더욱 깔끔하게 디자인하고 싶을 때 유용하게 활용할 수 있습니다.