(Python) 1_1. GUI 만들기

3 분 소요

💼📝🔑⏰ 📙📓📘📒🎓

💼 GUI 개발 초기 세팅

# 상단 import
import tkinter.messagebox as msgbox
import tkinter.ttk as ttk
from tkinter import *

# 선언
root = Tk()
root.title("일일체크리스트") # GUI 제목
root.geometry("640x480+500+300") # 화면 크기(가로길이, 세로길이, x좌표, y좌표)
# 계속 실행 만들기
root.mainloop()

📝버튼


btn2 = Button(root, padx=5, pady=10, text="버튼2") # 버튼크기 (padx=좌우  pady=상하)
btn2.pack() # 버튼 GUI에 반영

btn3 = Button(root, width=10, height=3, text="버튼3") # 버튼크기 (width와 Height는 고정크기)
btn3.pack() # 버튼 GUI에 반영

btn4 = Button(root, fg="red", bg="yellow", text="버튼4") # 버튼 색상반영
btn4.pack()

# 이미지버튼만들기
photo = PhotoImage(file="D:\pyCharm\projectRoot\GuiProject\gui_basic\img.png")
btn5 = Button(root, image=photo)
btn5.pack()

# 버튼 이벤트
def btncmd():
    print("버튼이 클릭되었어요")
    

btn7 = Button(root, text="동작하는 버튼", command=btncmd)
btn7.pack()

📝레이블

# 기본 라벨
label1 = Label(root, text="안녕하세요")
label1.pack()

# 이미지 라벨
photo = PhotoImage(file="D:\pyCharm\projectRoot\GuiProject\gui_basic\img.png")
label2 = Label(root, image=photo)
label2.pack()

# 라벨이벤트
def change():
    label1.config(text="또 만나요")

    global photo2  # 이미지 객체의 경우 함수안에서 생성하면 가비지 컬랙터가 가져감..
                   # 글로벌 변수로 설정 해주거나 함수 밖에서 선언해 놓아야한다.
    photo2 = PhotoImage(file="D:\pyCharm\projectRoot\GuiProject\gui_basic\img2.png")
    label2.config(image=photo2)

btn = Button(root, text="클릭", command=change)
btn.pack()

📝텍스트 박스 & Input 박스

# 기본 텍스트박스 생성
txt = Text(root, width=30, height=5)
txt.pack()

# 기본값 제공
txt.insert(END, "글자를 입력해주세요")

# 한줄 입력할수 있는 text 박스
e = Entry(root, width=30)
e.pack()
e.insert(0, "한 줄만 입력해요")

# 버튼 활용 예제
def btncmd():
    # 내용 출력
    print(txt.get("1.0", END)) #  1 : 1번라인, 0 : 0번째 자리 위치부터 , END : 마지막 자리까지
    print(e.get())

    # 내용 삭제
    txt.delete("1.0", END)
    e.delete(0, END)


btn = Button(root, text="클릭", command=btncmd)
btn.pack()

📝 리스트 박스

# 기본 리스트박스 생성
listbox = Listbox(root, selectmode="extended", height=0)
# selectmode 종류
# 1) single = 리스트에서 하나만 선택가능
# 2) extended = 리스트에서 여러개 선택가능
listbox.insert(0, "사과")
listbox.insert(1, "딸기")
listbox.insert(2, "바나나")
listbox.insert(END, "수박")
listbox.insert(END, "포도")
listbox.pack()


# 버튼 활용 예제
def btncmd():
    # 리스트박스 삭제
    # listbox.delete(0)  # 맨앞 항목 삭제
    # listbox.delete(END) # 맨뒤 항목 삭제
    # listbox.size() # 리스트 사이즈 리턴
    # listbox.get(0, 2) # 항목확인 (시작 index, 끝 index)
    # listbox.curselection() # 선택된 값의 index 반환 (ex) (1,2,3)
    pass


btn = Button(root, text="클릭", command=btncmd)
btn.pack()

📝 체크박스

# 기본 체크박스 생성
chkvar = IntVar() # chkvar에 int형으로 값을 저장한다
chkbox = Checkbutton(root, text="오늘 하루 보지 않기", variable=chkvar)
# chkbox.select() # 자동 선택 처리
# chkbox.deselect() # 선택 해제 처리
chkbox.pack()

chkvar2 = IntVar()
chkbox2 = Checkbutton(root, text="일주일동안 보지 않기", variable=chkvar2)
chkbox2.pack()
# 버튼 활용 예제
def btncmd():

    print(chkvar.get()) # 0 : 체크 해제, 1 : 체크
    print(chkvar2.get())  # 0 : 체크 해제, 1 : 체크
    pass


btn = Button(root, text="클릭", command=btncmd)
btn.pack()

📝 프로그래스 바

# 기본 프로그래스 바 생성
# progressbar = ttk.Progressbar(root, maximum=100, mode="indeterminate")
# progressbar = ttk.Progressbar(root, maximum=100, mode="determinate") #
# [mode 속성]
# indeterminate: 좌우로 왔다갔다
# determinate: 0 ~ 100까지 반복
#
# progressbar.start(3) # 3 ms 마다 움직이게 설정
# progressbar.pack()
# # 버튼 활용 예제
# def btncmd():
#     # progressbar.stop() 프로그래스 바 중지
#     pass
#
#
# btn = Button(root, text="클릭", command=btncmd)
# btn.pack()
################ 2번 예제
p_var2 = DoubleVar()
progressbar2 = ttk.Progressbar(root, maximum=100, length=150, variable=p_var2)
progressbar2.pack()

def btncmd2():
    for i in range(101):
        time.sleep(0.01) # 0.01초 대기

        p_var2.set(i) #
        progressbar2.update() # ui 업데이트
        print(p_var2.get())
    pass

btn = Button(root, text="시작", command=btncmd2)
btn.pack()

📝 메세지 박스

def Info():
    msgbox.showinfo("알림", "체크리스트 파일 생성이 완료되었습니다.")
    msgbox.showwarning("경고", "체크리스트 파일 생성에 실패하였습니다.")
    msgbox.showerror("에러", "체크리스트 파일 생성 에러")
    response = msgbox.askokcancel("확인 / 취소", "체크리스트를 진짜 생성하실건가요?")
    msgbox.askretrycancel("재시도 / 취소", "재시도를 묻는다")
    msgbox.askyesno("예/아니오", "예/아니오를 선택 할수 있음")
    print(response) # 값 출력확인
    pass

btn = Button(root, text="시작", command=Info)
btn.pack()

배경에 MP4적용하기

import tkinter as tk, threading
import tkinter.messagebox as msgbox
import imageio
from PIL import Image, ImageTk
import tkinter.ttk as ttk

video_name = "../RiChard_Kim.mp4"
video = imageio.get_reader(video_name)

def stream(label):
       for image in video.iter_data():
           frame_image = ImageTk.PhotoImage(Image.fromarray(image))
           label.config(image=frame_image)
           label.image = frame_image

def Info():
    response = msgbox.askokcancel("확인 / 취소", "체크리스트를 생성하시겠습니까?")
    print(response)

if __name__ == "__main__":
    root = tk.Tk()

    root.title("일일체크리스트")  # GUI 제목
    # root.geometry("640x480") # 화면 크기(가로, 세로)
    root.geometry("1600x800")  # 화면 크기(가로길이, 세로길이, x좌표, y좌표)
    btn = tk.Button(root, text="시작", command=Info)
    btn.pack()
    mp4_label = tk.Label(root)
    mp4_label.pack()
    thread = threading.Thread(target=stream, args=(mp4_label,))
    thread.daemon = 1

    thread.start()



    root.mainloop()

댓글남기기