(Python) 1_1. GUI 만들기
💼📝🔑⏰ 📙📓📘📒🎓
💼 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()
댓글남기기