Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

tkinter에서 import *를 사용한 뒤에도 ttk를 따로 임포트해야 하는 이유

tkinter 애플리케이션을 개발하려면 먼저 환경에 tkinter 라이브러리를 설치하고 임포트해야 합니다. 일반적으로 다음과 같이 from tkinter import * 명령어를 사용해 라이브러리를 가져옵니다.

"import *"(와일드카드 임포트)의 의미는 tkinter 라이브러리에 포함된 모든 함수와 내장 모듈을 한꺼번에 불러온다는 것입니다. 이렇게 하면 필요할 때마다 개별적으로 임포트하지 않고도 Tk(), Label() 같은 내장 클래스와 메서드를 바로 사용할 수 있습니다.

그런데 왜 ttk는 또 임포트해야 할까?

여기서 중요한 점은 import *가 tkinter의 최상위 이름 공간에 정의된 요소만 불러온다는 사실입니다. tkinter 패키지 안의 ttk처럼 별도의 서브모듈로 분리되어 있는 구성 요소는 자동으로 포함되지 않기 때문에, 반드시 따로 임포트해 주어야 합니다.

ttk(themed tk)는 위젯의 속성과 외관(look and feel)을 현대적이고 세련되게 꾸밀 수 있게 해주는 확장 모듈입니다. 예를 들어 기본 Button보다 ttk.Button이 운영체제 테마에 어울리는 더 깔끔한 디자인으로 표시됩니다. ttk를 사용하려면 아래 코드처럼 추가로 임포트합니다.

from tkinter import ttk

예제

다음 예제에서는 버튼과 레이블(Label) 위젯으로 구성된 간단한 동작 가능한 애플리케이션을 만들어 보겠습니다.

# tkinter 라이브러리 임포트
from tkinter import *
from tkinter import ttk

# tkinter 프레임(윈도우) 인스턴스 생성
win = Tk()

# 프레임 크기 설정
win.geometry("750x250")

# 레이블 텍스트를 변경하는 함수 정의
def change_text():
    label.configure(text="Welcome")

# 레이블 생성
label = Label(win, text="아래 버튼을 클릭하면 이 텍스트가 변경됩니다", font=('Aerial 20 bold'))
label.pack(pady=30)

# ttk 버튼 위젯 생성
button = ttk.Button(win, text="Commit", command=lambda: change_text())
button.pack()

win.mainloop()

실행 결과

위 코드를 실행하면 버튼 하나와 안내 문구가 담긴 레이블이 있는 창이 나타납니다. 여기서 버튼을 클릭하면 화면의 메시지가 변경됩니다.

tkinter에서 import *를 사용한 뒤에도 ttk를 따로 임포트해야 하는 이유

이제 "Commit" 버튼을 클릭하면 레이블의 텍스트가 "Welcome"으로 바뀌는 것을 확인할 수 있습니다.

tkinter에서 import *를 사용한 뒤에도 ttk를 따로 임포트해야 하는 이유

정리

from tkinter import *는 tkinter의 기본 기능을 편리하게 사용하기 위한 방법이지만, ttk와 같은 서브모듈은 포함되지 않으므로 from tkinter import ttk를 함께 작성해 주어야 합니다. 참고로 프로젝트 규모가 커질수록 와일드카드 임포트는 이름 충돌을 일으킬 수 있으므로, 필요한 모듈만 명시적으로 임포트하는 습관을 들이는 것이 좋습니다.