Python Tkinter - 1. 소개와 기본 위젯
2025. 1. 20. 00:14ㆍ프로그래밍 언어/Python
이론
Tkinter란?
Tkinter는 Python 표준 라이브러리 중 하나로, GUI(Graphical User Interface) 애플리케이션을 쉽게 개발할 수 있는 도구입니다. 최신 Python 배포판은 Tcl/Tk 8.6을 포함하고 있어 최신 기능을 사용할 수 있습니다.
- 가볍고 사용이 간편: 별도의 설치가 필요하지 않고, Python과 함께 제공됩니다.
- 크로스 플랫폼 지원: Windows, macOS, Linux 등 다양한 운영 체제에서 동작합니다. 다만, 플랫폼별로 일부 위젯의 외형이나 동작 방식이 약간 다를 수 있으므로 테스트가 필요합니다.
- 초보자 친화적: Python의 문법과 잘 통합되어 있어 초보자도 쉽게 GUI 애플리케이션을 제작할 수 있습니다.
GUI 프로그래밍의 기본
GUI 프로그래밍은 이벤트 기반 프로그래밍의 한 형태입니다.
- 이벤트 기반 프로그래밍:
- 사용자의 동작(클릭, 입력 등)에 반응하여 애플리케이션이 동작합니다.
- mainloop()는 Tkinter 애플리케이션의 핵심으로, 이를 실행하지 않으면 GUI 창이 표시되지 않습니다. 사용자의 입력을 계속 대기하고 처리하며, 이벤트 루프를 유지합니다.
- GUI 애플리케이션의 동작 원리:
- 위젯(Widget): 사용자와 상호작용하는 요소(버튼, 입력 상자 등).
- 이벤트(Event): 사용자 입력(클릭, 키보드 입력 등).
- 이벤트 처리(Event Handling): 특정 이벤트가 발생했을 때 실행할 동작을 정의.
Tkinter 설치 및 구성
Tkinter는 Python에 기본적으로 포함되어 있으며, 설치 과정에서 발생할 수 있는 일반적인 오류로는 Python 설치 시 Tcl/Tk 라이브러리가 누락된 경우가 있습니다. 이를 해결하려면 Python을 다시 설치하거나 환경 변수를 확인해야 합니다.
- 설치 확인:위 명령어를 실행하여 Tkinter 데모 창이 뜨면 성공적으로 설치된 것입니다.
- python -m tkinter
- IDE 설정:
- PyCharm, VSCode와 같은 IDE에서 Python 인터프리터를 설정하면 Tkinter를 사용할 준비가 완료됩니다.
실습
1. 첫 번째 애플리케이션 만들기
다음은 Tkinter 애플리케이션의 기본 구조입니다:
import tkinter as tk
# Tk 객체 생성
root = tk.Tk()
# 창 제목 설정
root.title("첫 번째 Tkinter 앱")
# 창 크기 설정
root.geometry("300x200")
# mainloop 실행
root.mainloop()
코드 설명
- Tk(): 애플리케이션의 기본 창을 생성합니다.
- title(): 창의 제목을 설정합니다.
- geometry(): 창의 크기를 "너비x높이" 형태로 지정합니다.
- mainloop(): 창을 실행하고 이벤트를 대기합니다.
2. 기본 위젯 다루기
Label: 텍스트 또는 이미지 표시
label = tk.Label(root, text="Hello, Tkinter!")
label.pack()
Button: 클릭 이벤트 처리
def on_button_click():
label.config(text="Button Clicked!")
button = tk.Button(root, text="Click Me", command=on_button_click)
button.pack()
Entry: 한 줄 입력 상자
entry = tk.Entry(root)
entry.pack()
def show_entry():
print("Entry content:", entry.get())
button = tk.Button(root, text="Show Entry", command=show_entry)
button.pack()
Text: 여러 줄 입력 상자
text = tk.Text(root, height=5, width=30)
text.pack()
3. 간단한 이벤트 처리
버튼 클릭 시 텍스트 업데이트하기: Tkinter는 기본적으로 스레드 안전하지 않으므로, 멀티스레딩 작업 시 주의가 필요합니다. GUI 업데이트는 반드시 메인 스레드에서 이루어져야 합니다.
def update_label():
label.config(text="Updated Text!")
label = tk.Label(root, text="Original Text")
label.pack()
button = tk.Button(root, text="Update", command=update_label)
button.pack()
과제
간단한 계산기 만들기
두 숫자를 입력받아 사칙연산 결과를 출력하는 계산기를 만들어 봅시다.
def calculate():
try:
num1 = float(entry1.get())
num2 = float(entry2.get())
operation = op_var.get()
if operation == "덧셈":
result = num1 + num2
elif operation == "뺄셈":
result = num1 - num2
elif operation == "곱셈":
result = num1 * num2
elif operation == "나눗셈":
result = num1 / num2
else:
result = "연산 선택 필요"
result_label.config(text=f"결과: {result}")
except Exception as e:
result_label.config(text=f"오류: {e}")
# 첫 번째 숫자 입력
entry1 = tk.Entry(root)
entry1.pack()
# 두 번째 숫자 입력
entry2 = tk.Entry(root)
entry2.pack()
# 연산 선택
op_var = tk.StringVar()
operations = ["덧셈", "뺄셈", "곱셈", "나눗셈"]
for op in operations:
tk.Radiobutton(root, text=op, value=op, variable=op_var).pack()
# 결과 표시 라벨
result_label = tk.Label(root, text="결과: ")
result_label.pack()
# 계산 버튼
button = tk.Button(root, text="계산", command=calculate)
button.pack()
root.mainloop()
구현 기능
- 두 숫자 입력.
- 연산 선택(덧셈, 뺄셈, 곱셈, 나눗셈).
- 결과를 라벨에 출력.
기대 효과
- Tkinter의 기본 위젯과 이벤트 처리를 이해하고 직접 구현해 볼 수 있습니다.
- GUI 애플리케이션의 기본 구조와 동작 방식을 학습할 수 있습니다.
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python Tkinter - 2. 레이아웃 관리와 고급 이벤트 처리 (0) | 2025.01.20 |
---|---|
Python - 12. 동시성과 병렬 처리 (0) | 2025.01.20 |
Python - 11. 내장 함수와 표준 라이브러리 (0) | 2025.01.19 |
Python - 10. 모듈과 패키지 (0) | 2025.01.19 |
Python - 9. 객체 지향 프로그래밍 (0) | 2025.01.19 |