-
[1월 4주차-1/24(2)]Python GUI 프로그래밍: Tkinter로 시작하기Why Not SW CAMP 5기/수업 기록 2025. 1. 24. 15:27
Python에서 GUI(Graphical User Interface)를 구현하려면 Tkinter를 가장 많이 사용합니다. Tkinter는 기본으로 제공되는 모듈로, 그래픽 요소를 쉽게 추가할 수 있어 초보자부터 전문가까지 유용하게 활용할 수 있습니다. 이번 글에서는 Tkinter의 기본 개념부터 다양한 위젯 사용 방법까지 알아보겠습니다.
1. GUI와 Tkinter란?
- UI(User Interface): 사용자와 프로그램 간의 상호작용을 가능하게 하는 모든 요소를 의미합니다.
- GUI(Graphical User Interface): UI 중에서 시각적인 요소를 활용하여 사용자 경험을 향상시키는 인터페이스를 의미합니다.
- Tkinter: Python에서 기본으로 제공하는 GUI 라이브러리로, 버튼, 텍스트, 이미지 등 다양한 위젯을 생성하고 배치할 수 있습니다.
2. Tkinter 창 생성하기
Tkinter에서 가장 기본적인 작업은 창을 띄우는 것입니다.
from tkinter import * # 기본 창 생성 root = Tk() # 창의 제목 설정 root.title('My First Tkinter') # 창 크기 지정 root.geometry('400x200') # 창 실행 root.mainloop()위 코드로 기본 창을 생성하고 실행할 수 있습니다. root.mainloop()는 창이 닫힐 때까지 프로그램이 실행되도록 유지하는 역할을 합니다.
3. 레이블 (Label)
레이블은 텍스트나 이미지를 표시하는 위젯입니다.

레이블 옵션들 3-1. 텍스트 레이블
root = Tk() root.title('Label Example') root.geometry('400x200') label1 = Label(root, text='Hello, Tkinter!', bg='red', fg='yellow', font=('Malgun Gothic', 20), width=15, height=3, anchor='center', relief='raised', borderwidth=10) label1.pack() root.mainloop()위 코드는 빨간 배경과 노란 텍스트 색상을 가진 레이블을 생성합니다.
3-2. 이미지 레이블
이미지도 레이블로 표시할 수 있습니다.
root = Tk() root.title('Image Label') root.geometry('600x500') image = PhotoImage(file='map_y.png') # 이미지 파일 경로 img_label = Label(root, image=image) img_label.pack() root.mainloop()3-3. 텍스트와 이미지 배치
레이블을 그리드 레이아웃으로 배치해 텍스트와 이미지를 함께 표시할 수 있습니다.
root = Tk() root.title('Text and Image') root.geometry('700x500') label_txt = Label(root, text='Hello Tkinter', font=('Malgun Gothic', 30)) label_txt.grid(row=0, column=0) image = PhotoImage(file='map_y.png') label_img = Label(root, image=image) label_img.grid(row=1, column=0) root.mainloop()
4. 버튼 (Button)
버튼을 클릭하면 특정 동작을 수행하도록 이벤트를 연결할 수 있습니다.
Hello 출력 버튼

결과 from tkinter import * def sayhello(): txt.set('Hello!!!' * 3) root = Tk() root.title('Button Example') root.geometry('400x200') btn1 = Button(root, text='Click!', width=10, height=2, command=sayhello) label = Label(root, text='Click the button~!') txt = StringVar() message = Label(root, textvariable=txt) btn1.grid(row=0, column=1) label.grid(row=0, column=0) message.grid(row=1, column=0, columnspan=2) root.mainloop()StringVar()는 동적으로 변하는 텍스트를 저장하는 변수입니다.
5. 구구단 프로그램 만들기
랜덤 구구단 문제를 생성하고 정답을 표시하는 간단한 프로그램입니다.

결과 from tkinter import * import random num1, num2 = 0, 0 # 버튼 클릭시 실행될 이벤트 작성 def make_question(): global num1, num2 num1, num2 = random.randint(1,9), random.randint(1,9) question.set(str(num1)+' x '+str(num2)+' = '+'?') answer.set('') def check_answer(): answer.set(num1*num2) # tkinter 화면 구성 root = Tk() root.title('구구단을 외자') root.geometry('500x400') label1 = Label(root, text='루비랑~ 함께하는~ 랜덤~ 구구단~', font=('Malgun Gothic', 15)) label1.grid(row=0, column=0, columnspan=2) # 문제 부분 question = StringVar() q_lbl = Label(root, width=25, textvariable = question, bg='lightblue', font=('Malgun Gothic', 18)) q_lbl.grid(row=1, column=0) q_btn = Button(root, text='새로운 문제', width=10, command=make_question, font=('Malgun Gothic', 15)) q_btn.grid(row=1, column=1) # 정답 부분 answer = StringVar() a_lbl = Label(root, width=25, textvariable = answer, bg='pink', font=('Malgun Gothic', 18)) a_lbl.grid(row=2, column=0) a_btn = Button(root, text='정답', width=10, command=check_answer, font=('Malgun Gothic', 15)) a_btn.grid(row=2, column=1) root.mainloop()
6. 엔트리 (Entry)
엔트리는 텍스트를 입력받는 필드를 제공합니다.
from tkinter import * def entry_value(): print(ent.get()) root = Tk() root.title('Entry Example') root.geometry('500x400') ent = Entry(root, width=25) ent.grid(row=0, column=1) label = Label(root, text='Name: ', width=10, height=5) label.grid(row=0, column=0) btn = Button(root, text='OK', command=entry_value) btn.grid(row=0, column=2) root.mainloop()
7. 프레임 (Frame)
프레임은 위젯을 그룹으로 묶는 컨테이너 역할을 합니다.

결과 from tkinter import * root = Tk() root.title('Frame Example') root.geometry('400x200') frame_A = Frame(root, relief='groove', borderwidth=2) frame_A.grid(row=0, column=0) frame_B = Frame(root, relief='groove', borderwidth=2) frame_B.grid(row=1, column=0) id_label = Label(frame_A, text='ID', width=10, height=2) id_label.grid(row=0, column=0) ent1 = Entry(frame_A, width=25) ent1.grid(row=0, column=1) pw_label = Label(frame_B, text='PW', width=10, height=2) pw_label.grid(row=0, column=0) ent2 = Entry(frame_B, width=25) ent2.grid(row=0, column=1) btn = Button(root, text='Login', width=10) btn.grid(row=2, column=0, columnspan=2) root.mainloop()
정리하며
Tkinter는 Python을 사용해 간단한 GUI를 구현하는 데 적합한 라이브러리입니다. 이번 글에서 다룬 텍스트 레이블, 버튼, 엔트리, 프레임 등은 기본적인 위젯들이지만, 이를 조합하여 GUI 애플리케이션을 만들 수 있엇습니다.😊
'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[2월 1주차-2/4]📌 파이썬: 함수, 모듈, 클래스 정리 (0) 2025.02.04 [2월 1주차-2/3]Spyder에서 파이썬 실습 정리 🐍 (1) 2025.02.03 [1월 4주차-1/24(1)]파이썬 지도 시각화: Folium으로 간단히 배우는 지도 활용 (1) 2025.01.24 [1월 4주차-1/23] Python 기초 문법과 데이터 분석 기초(데이터 추출, 가공, 시각화) (0) 2025.01.23 [1월 4주차-1/22]EBS(Elastic Block Store), ELB(Elastic Load Balancing) 개념 정리 및 실습 (1) 2025.01.22