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