본문 바로가기

개발공부/python

패스트캠퍼스 환급챌린지 13일차 : 한 번에 끝내는 컴퓨터 공학 & 인공지능 복수전공 초격차 패키지 강의 후기

반응형

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

 

Ch 13 심화 : Tkinter 라이브러리 활용으로 스킬업

 

파이썬으로 GUI 개발 시작하기: Tkinter 완벽 가이드

파이썬은 데이터 분석, 웹 개발, 자동화 등 다양한 분야에서 활용되는 강력한 언어입니다. 하지만 때로는 사용자 친화적인 인터페이스를 통해 사용자와 상호작용해야 할 필요가 있습니다. 이때 등장하는 것이 바로 GUI(Graphical User Interface) 라이브러리입니다. 파이썬에는 여러 GUI 라이브러리가 있지만, 그 중에서도 가장 기본적이면서도 강력한 기능을 제공하는 것이 바로 Tkinter입니다.

이 글에서는 Tkinter가 무엇인지부터 시작하여, Tkinter를 이용한 기본적인 GUI 애플리케이션 개발 방법, 그리고 유용한 위젯들을 활용하는 방법까지 자세히 알아보겠습니다.

1. Tkinter란 무엇인가요?

Tkinter는 파이썬의 표준 GUI 라이브러리입니다. 즉, 별도의 설치 없이 파이썬을 설치하면 기본적으로 포함되어 있어 바로 사용할 수 있다는 장점이 있습니다. Tkinter는 Tcl/Tk라는 GUI 툴킷을 파이썬에서 사용할 수 있도록 래핑(Wrapping)한 것입니다.

Tkinter의 주요 특징:

  • 크로스 플랫폼: Windows, macOS, Linux 등 다양한 운영체제에서 동일하게 작동합니다.
  • 쉬운 학습 곡선: 다른 GUI 라이브러리에 비해 문법이 직관적이고 간단하여 초보자도 쉽게 배울 수 있습니다.
  • 풍부한 위젯: 버튼, 레이블, 텍스트 입력창, 체크박스 등 다양한 GUI 구성 요소를 제공합니다.
  • 파이썬 표준 라이브러리: 별도 설치 없이 바로 사용 가능합니다.

Tkinter는 간단한 유틸리티 프로그램이나 학습용 애플리케이션을 만들기에 매우 적합하며, 파이썬으로 GUI 프로그래밍을 시작하는 데 훌륭한 출발점이 됩니다.

2. Tkinter로 첫 번째 GUI 애플리케이션 만들기

이제 Tkinter를 사용하여 "Hello, Tkinter!"를 출력하는 간단한 GUI 애플리케이션을 만들어 보겠습니다.

import tkinter as tk

# 1. Tkinter 윈도우(루트 윈도우) 생성
root = tk.Tk()

# 2. 윈도우 제목 설정
root.title("나의 첫 Tkinter 앱")

# 3. 윈도우 크기 설정 (옵션)
root.geometry("400x200") # 너비 x 높이

# 4. 레이블 위젯 생성
label = tk.Label(root, text="Hello, Tkinter!", font=("Arial", 24))

# 5. 레이블 위젯을 윈도우에 배치
label.pack(pady=50) # pady는 위아래 여백을 줍니다.

# 6. Tkinter 이벤트 루프 시작
root.mainloop()

print("애플리케이션이 종료되었습니다.")

코드 설명:

  1. import tkinter as tk: Tkinter 모듈을 tk라는 별칭으로 임포트합니다.
  2. root = tk.Tk(): Tkinter 애플리케이션의 메인 윈도우(루트 윈도우)를 생성합니다. 모든 Tkinter 위젯은 이 루트 윈도우 또는 다른 컨테이너 위젯에 속하게 됩니다.
  3. root.title("나의 첫 Tkinter 앱"): 윈도우의 제목을 설정합니다.
  4. root.geometry("400x200"): 윈도우의 초기 크기를 너비 400픽셀, 높이 200픽셀로 설정합니다.
  5. label = tk.Label(root, text="Hello, Tkinter!", font=("Arial", 24)): tk.Label 위젯을 생성합니다. root는 이 레이블이 속할 부모 윈도우를 의미하고, text는 표시될 텍스트, font는 폰트 설정을 나타냅니다.
  6. label.pack(pady=50): 생성된 label 위젯을 윈도우에 배치합니다. pack()은 가장 간단한 배치 관리자로, 위젯을 자동으로 정렬합니다. pady는 상하 패딩(여백)을 추가합니다.
  7. root.mainloop(): Tkinter 이벤트 루프를 시작합니다. 이 함수는 윈도우가 열리고 사용자의 입력을 기다리는 상태가 됩니다. 윈도우가 닫히기 전까지는 이 함수에서 벗어나지 않습니다.

이 코드를 실행하면 "Hello, Tkinter!"라는 텍스트가 중앙에 표시된 간단한 윈도우가 나타날 것입니다.

3. Tkinter의 핵심 구성 요소: 위젯 (Widgets)

Tkinter는 다양한 기능을 수행하는 미리 정의된 GUI 요소들을 제공하는데, 이를 위젯(Widget)이라고 부릅니다. 몇 가지 주요 위젯들을 살펴보겠습니다.

  • Tk(): 최상위 윈도우(루트 윈도우)를 나타냅니다.
  • Label: 텍스트나 이미지를 표시하는 데 사용됩니다.
  • Button: 클릭 이벤트를 처리하는 버튼을 만듭니다.
  • Entry: 한 줄 텍스트 입력을 받습니다.
  • Text: 여러 줄 텍스트 입력을 받거나 표시합니다.
  • Frame: 다른 위젯들을 그룹화하는 컨테이너 역할을 합니다.
  • Checkbutton: 체크박스를 만듭니다.
  • Radiobutton: 여러 옵션 중 하나를 선택하는 라디오 버튼을 만듭니다.
  • Scale: 슬라이더를 만들어 값을 선택합니다.
  • Canvas: 그래픽을 그리거나 이미지를 표시하는 데 사용됩니다.

4. 위젯 배치 관리자 (Geometry Managers)

Tkinter 위젯을 윈도우에 배치하는 방법은 여러 가지가 있습니다. 이를 배치 관리자(Geometry Manager)라고 합니다.

  • pack(): 위젯을 블록 형태로 배치하며, 간편하게 사용할 수 있습니다. side, fill, expand, pady, padx 등의 옵션을 통해 정렬 방식을 조절할 수 있습니다.
  • grid(): 위젯을 행(row)과 열(column) 기반의 격자(그리드) 형태로 배치합니다. 복잡한 레이아웃을 만들 때 유용합니다. row, column, rowspan, columnspan, padx, pady, sticky 등의 옵션을 사용합니다.
  • place(): 위젯을 절대적인 좌표(x, y) 또는 상대적인 위치(relx, rely, relwidth, relheight)에 배치합니다. 가장 유연하지만, 윈도우 크기 변경 시 레이아웃이 깨질 수 있어 주의가 필요합니다.

일반적으로 pack()과 grid()가 주로 사용되며, 두 배치 관리자를 한 윈도우 안에서 혼용하는 것은 권장되지 않습니다. (프레임을 사용하여 각 프레임마다 다른 배치 관리자를 사용하는 것은 가능합니다.)

5. 이벤트 처리: 버튼 클릭 예제

GUI 애플리케이션의 핵심은 사용자 이벤트에 반응하는 것입니다. 버튼 클릭 이벤트를 처리하는 예제를 통해 Tkinter의 이벤트 처리 방법을 알아보겠습니다.

import tkinter as tk
from tkinter import messagebox # 메시지 박스를 사용하기 위해 임포트

def button_click():
    """버튼 클릭 시 실행될 함수"""
    messagebox.showinfo("클릭 이벤트", "버튼이 클릭되었습니다!")

# 1. Tkinter 윈도우 생성
root = tk.Tk()
root.title("버튼 클릭 예제")
root.geometry("300x150")

# 2. 레이블 생성
label = tk.Label(root, text="아래 버튼을 클릭하세요.", font=("Malgun Gothic", 14))
label.pack(pady=20)

# 3. 버튼 생성 및 커맨드 연결
# command 인수에 함수 이름을 넘겨주면, 버튼 클릭 시 해당 함수가 호출됩니다.
button = tk.Button(root, text="클릭하세요!", command=button_click, font=("Malgun Gothic", 12))
button.pack(pady=10)

# 4. Tkinter 이벤트 루프 시작
root.mainloop()

코드 설명:

  1. from tkinter import messagebox: 팝업 메시지 박스를 사용하기 위해 messagebox 모듈을 임포트합니다.
  2. def button_click():: 버튼이 클릭되었을 때 실행될 button_click 함수를 정의합니다. 이 함수 안에서는 messagebox.showinfo()를 사용하여 정보 메시지 박스를 띄웁니다.
  3. button = tk.Button(root, text="클릭하세요!", command=button_click, ...): tk.Button 위젯을 생성하고, command 인수에 button_click 함수를 연결합니다. 이렇게 하면 버튼이 클릭될 때마다 button_click 함수가 자동으로 호출됩니다.

이 코드를 실행하면 "클릭하세요!" 버튼이 있는 윈도우가 나타나고, 버튼을 클릭할 때마다 "버튼이 클릭되었습니다!"라는 메시지 박스가 팝업될 것입니다.

6. 입력 받기: Entry 위젯 활용

사용자로부터 텍스트 입력을 받는 Entry 위젯을 사용하는 예제를 살펴보겠습니다.

import tkinter as tk
from tkinter import messagebox

def submit_name():
    """이름 제출 버튼 클릭 시 실행될 함수"""
    name = entry_name.get() # Entry 위젯의 현재 텍스트를 가져옵니다.
    if name: # 이름이 입력되었는지 확인
        messagebox.showinfo("환영합니다!", f"안녕하세요, {name}님!")
    else:
        messagebox.showwarning("경고", "이름을 입력해주세요.")

# 1. Tkinter 윈도우 생성
root = tk.Tk()
root.title("이름 입력 예제")
root.geometry("350x200")

# 2. 레이블 생성
label_prompt = tk.Label(root, text="이름을 입력해주세요:", font=("Malgun Gothic", 14))
label_prompt.pack(pady=20)

# 3. Entry 위젯 생성
entry_name = tk.Entry(root, width=30, font=("Malgun Gothic", 12))
entry_name.pack(pady=5)

# 4. 제출 버튼 생성
button_submit = tk.Button(root, text="제출", command=submit_name, font=("Malgun Gothic", 12))
button_submit.pack(pady=10)

# 5. Tkinter 이벤트 루프 시작
root.mainloop()

코드 설명:

  1. entry_name = tk.Entry(root, width=30, ...): tk.Entry 위젯을 생성합니다. width는 입력 필드의 너비를 문자의 개수로 설정합니다.
  2. name = entry_name.get(): submit_name 함수 내에서 entry_name.get()을 호출하여 Entry 위젯에 현재 입력되어 있는 텍스트를 가져옵니다.
  3. 가져온 텍스트가 비어있지 않으면 환영 메시지를, 비어있으면 경고 메시지를 표시합니다.

7. 더 나아가기: 고급 Tkinter 기능

Tkinter는 위에서 소개한 기본 기능 외에도 다양한 고급 기능을 제공합니다.

  • 메뉴 바(Menubar): 파일, 편집 등 상단 메뉴를 만들 수 있습니다. (tk.Menu)
  • 스크롤 바(Scrollbar): Text 위젯 등과 함께 사용하여 내용이 길어질 때 스크롤 기능을 추가합니다. (tk.Scrollbar)
  • 이미지 처리: PhotoImage를 사용하여 이미지를 표시할 수 있습니다.
  • 다이얼로그(Dialogs): 파일 열기/저장, 색상 선택 등 표준 다이얼로그를 사용할 수 있습니다. (tkinter.filedialog, tkinter.colorchooser)
  • 데이터 바인딩(Variable Classes): StringVar, IntVar 등의 특별한 변수 클래스를 사용하여 위젯과 변수를 동기화할 수 있습니다.
  • 커스텀 위젯: 기존 위젯을 상속하여 자신만의 커스텀 위젯을 만들 수 있습니다.

 

오늘의 실습

 

 

마지막 실습은 계속 메뉴바가 안떠서 뭐가 문제지 했는데, 맥이라서 상단에 뜨고있었다. 

 

 

https://fastcampus.info/4n8ztzq

 

(~6/20) 50일의 기적 AI 환급반💫 | 패스트캠퍼스

초간단 미션! 하루 20분 공부하고 수강료 전액 환급에 AI 스킬 장착까지!

fastcampus.co.kr

 

반응형