Python
[Python] tkinter 기초부터 배우기 GUI 개발 시작하기
creato
2024. 12. 14. 11:45
728x90
반응형
SMALL
맨날 뤼튼이 만들어주는 tkinter 복붙 하다 보니 이해가 안 가서
ChatGPT한테 기초부터 공부시켜달라고 했당.
1. tkinter 라이브러리 설치
pip install tk
2. 기본 GUI 창 만들기
import tkinter as tk
# 창을 생성
root = tk.Tk()
# 창의 제목 설정
root.title("기본 GUI 창")
# 창의 크기 설정
root.geometry("300x200")
# 창을 실행
root.mainloop()
3. 버튼 추가하기
import tkinter as tk
def on_button_click():
print("버튼이 클릭되었습니다!")
root = tk.Tk()
root.title("버튼 예제")
root.geometry("300x200")
# 버튼 추가
button = tk.Button(root, text="클릭해 보세요", command=on_button_click)
button.pack(pady=20)
root.mainloop()
4. 레이블(텍스트) 추가하기
import tkinter as tk
root = tk.Tk()
root.title("레이블 예제")
root.geometry("300x200")
# 레이블 추가
label = tk.Label(root, text="안녕하세요!", font=("Arial", 14))
label.pack(pady=20)
root.mainloop()
- 히히 5번 먼저 해버려서 이럼~
5. 텍스트 입력 필드 추가하기
import tkinter as tk
def on_submit():
user_input = entry.get()
print(f"입력한 값: {user_input}")
root = tk.Tk()
root.title("입력 예제")
root.geometry("300x200")
# 텍스트 입력 필드 추가
entry = tk.Entry(root, width=20)
entry.pack(pady=20)
# 제출 버튼 추가
submit_button = tk.Button(root, text="제출", command=on_submit)
submit_button.pack()
root.mainloop()
6. 레이아웃 관리
1. pack 위젯을 위에서부터 아래로 배치하는 방식.
import tkinter as tk
root = tk.Tk()
root.title("pack 예제")
# 위젯을 위에서부터 차례대로 배치
label = tk.Label(root, text="이것은 레이블입니다.")
label.pack(pady=10)
button = tk.Button(root, text="클릭하세요")
button.pack(pady=10)
root.mainloop()
2. grid 위젯을 행과 열로 나누어 배치하는 방식
import tkinter as tk
root = tk.Tk()
root.title("grid 예제")
# 2행 2열로 위젯 배치
label = tk.Label(root, text="이것은 레이블입니다.")
label.grid(row=0, column=0, padx=10, pady=10)
button = tk.Button(root, text="클릭하세요")
button.grid(row=1, column=0, padx=10, pady=10)
entry = tk.Entry(root)
entry.grid(row=0, column=1, padx=10, pady=10)
root.mainloop()
3. place 절대 위치 지정
import tkinter as tk
root = tk.Tk()
root.title("place 예제")
# 위젯의 위치를 절대 좌표로 지정
label = tk.Label(root, text="이것은 레이블입니다.")
label.place(x=50, y=50)
button = tk.Button(root, text="클릭하세요")
button.place(x=100, y=100)
root.mainloop()
7. 체크박스와 라디오 버튼 사용하기
1. 체크박스
import tkinter as tk
def show_selection():
print(f"체크박스 선택 상태: {checkbox_var.get()}")
root = tk.Tk()
root.title("체크박스 예제")
checkbox_var = tk.IntVar() # 체크박스 상태를 저장하는 변수
checkbox = tk.Checkbutton(root, text="이 옵션을 선택하세요", variable=checkbox_var)
checkbox.pack(pady=10)
button = tk.Button(root, text="선택 상태 확인", command=show_selection)
button.pack()
root.mainloop()
2. 라디오 버튼
import tkinter as tk
def show_choice():
print(f"선택한 옵션: {radio_var.get()}")
root = tk.Tk()
root.title("라디오 버튼 예제")
radio_var = tk.StringVar() # 선택된 라디오 버튼 값을 저장하는 변수
radio1 = tk.Radiobutton(root, text="옵션 1", variable=radio_var, value="옵션 1")
radio1.pack()
radio2 = tk.Radiobutton(root, text="옵션 2", variable=radio_var, value="옵션 2")
radio2.pack()
button = tk.Button(root, text="선택한 옵션 확인", command=show_choice)
button.pack()
root.mainloop()
8. 리스트 박스
import tkinter as tk
def show_selection():
selected_item = listbox.curselection()
print(f"선택한 항목: {listbox.get(selected_item)}")
root = tk.Tk()
root.title("리스트 박스 예제")
# 리스트 박스 생성
listbox = tk.Listbox(root)
listbox.pack(pady=10)
# 항목 추가
listbox.insert(tk.END, "항목 1")
listbox.insert(tk.END, "항목 2")
listbox.insert(tk.END, "항목 3")
button = tk.Button(root, text="선택한 항목 확인", command=show_selection)
button.pack()
root.mainloop()
9. 슬라이더
import tkinter as tk
def show_value(val):
print(f"슬라이더 값: {val}")
root = tk.Tk()
root.title("슬라이더 예제")
# 슬라이더 생성
slider = tk.Scale(root, from_=0, to=100, orient=tk.HORIZONTAL, command=show_value)
slider.pack(pady=20)
root.mainloop()
10. 파일 다이얼로그 (파일 열기/저장하기)
- 파일 열기
import tkinter as tk
from tkinter import filedialog
def open_file():
file_path = filedialog.askopenfilename(title="파일 열기")
print(f"선택한 파일: {file_path}")
root = tk.Tk()
root.title("파일 열기 다이얼로그")
open_button = tk.Button(root, text="파일 열기", command=open_file)
open_button.pack(pady=20)
root.mainloop()
- 파일 저장
import tkinter as tk
from tkinter import filedialog
def save_file():
file_path = filedialog.asksaveasfilename(title="파일 저장")
print(f"파일 저장 위치: {file_path}")
root = tk.Tk()
root.title("파일 저장 다이얼로그")
save_button = tk.Button(root, text="파일 저장", command=save_file)
save_button.pack(pady=20)
root.mainloop()
11. 메시지 박스 (알림, 오류, 확인)
- 알림 메시지 박스
import tkinter as tk
from tkinter import messagebox
def show_info():
messagebox.showinfo("정보", "이것은 정보 메시지입니다!")
root = tk.Tk()
root.title("메시지 박스 예제")
info_button = tk.Button(root, text="정보 메시지", command=show_info)
info_button.pack(pady=20)
root.mainloop()
- 경고 메시지 박스
import tkinter as tk
from tkinter import messagebox
def show_warning():
messagebox.showwarning("경고", "이것은 경고 메시지입니다!")
root = tk.Tk()
root.title("경고 메시지 박스")
warning_button = tk.Button(root, text="경고 메시지", command=show_warning)
warning_button.pack(pady=20)
root.mainloop()
- 오류 메시지 박스
import tkinter as tk
from tkinter import messagebox
def show_error():
messagebox.showerror("오류", "이것은 오류 메시지입니다!")
root = tk.Tk()
root.title("오류 메시지 박스")
error_button = tk.Button(root, text="오류 메시지", command=show_error)
error_button.pack(pady=20)
root.mainloop()
12. 창 닫기 전에 확인 대화 상자
import tkinter as tk
from tkinter import messagebox
def on_closing():
if messagebox.askokcancel("종료 확인", "정말 종료하시겠습니까?"):
root.destroy()
root = tk.Tk()
root.title("창 닫기 확인 예제")
root.protocol("WM_DELETE_WINDOW", on_closing)
root.mainloop()
13. 스크롤 바
import tkinter as tk
root = tk.Tk()
root.title("스크롤바 예제")
# 텍스트 위젯 생성
text_widget = tk.Text(root, height=10, width=30)
text_widget.pack(side=tk.LEFT, padx=10)
# 스크롤바 추가
scrollbar = tk.Scrollbar(root, command=text_widget.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
# 스크롤바와 텍스트 위젯 연결
text_widget.config(yscrollcommand=scrollbar.set)
root.mainloop()
- 이름 안 바꾼 건 필요한 부분만 소스 바꾸면서 하고 있어서(...)
14. 팝업 윈도우
import tkinter as tk
def open_new_window():
new_window = tk.Toplevel(root)
new_window.title("새 창")
label = tk.Label(new_window, text="이것은 새 창입니다!")
label.pack(pady=20)
root = tk.Tk()
root.title("팝업 윈도우 예제")
open_button = tk.Button(root, text="새 창 열기", command=open_new_window)
open_button.pack(pady=20)
root.mainloop()
- 너무 작아서 창이 안 옮겨짐. 아무튼 버튼 누르면 새 창 뜸.
15. 시간과 날짜 표시
import tkinter as tk
import time
def update_time():
current_time = time.strftime("%H:%M:%S")
label.config(text=current_time)
label.after(1000, update_time) # 1초마다 업데이트
root = tk.Tk()
root.title("시간 표시 예제")
label = tk.Label(root, font=("Arial", 40))
label.pack(pady=50)
update_time()
root.mainloop()
16. 색상 변경하기
import tkinter as tk
root = tk.Tk()
root.title("색상 변경 예제")
# 버튼 색상 변경
button = tk.Button(root, text="파란색으로 바꾸기", bg="blue", fg="white")
button.pack(pady=20)
root.mainloop()
더 알려달라고 하니까 엄청 심화 부분 알려줌.
그래서 너무 어렵다고 기초가 아니라고 따졌음. 히히.
대충 위젯들이 있구나 하고 깨닫게 된 것.
자바 처음 배울 때 생각나는구만.
패널 붙여서 절댓값으로 위치 지정해서 붙였는데.
생각해 보면 나 진짜 이것저것 해보긴 한 듯.
728x90
반응형
LIST