상세 컨텐츠

본문 제목

python 백업 프로그램 만들기 1 - UI

본문

반응형

UI만들기

 

 

0.설계도 ㅋㅋ

 개인적으로 손으로 그리며 생각을 정리한다.....옛날 사람이라 손이 편하다.

 기본적인 버튼이나 Lable등을 구성하고, Frame은 보통 가로를 기준으로 나눠서 생성한다.(파란색 동그라미 영역)

 이 부실한 설계도를 한번 그리고 나면 코딩 중간 중간 눈에도 쉽게 들어오고

 항목을 추가 할 때도 생각보다 큰 도움이 된다.ㅋㅋ

 

 

1. tkinter 를 이용해서 UI 코딩 

  : 설계도 대로 잘 만들었다. ㅋㅋㅋ 그런데 조금 어색하고 미흡한 부분이 보이기 시작해서

    설계도에는 누락되었던 항목 이름 등 Lable을 추가했다.

 

   

 하지만 아직 뭔가 부족하다. 그래서 1차 수정을 시작

 

2. 1차 수정

 2-1. 날짜 검색 시, 예시 문구 추가

 2-2. zip 파일 생성 후, 다운로드에 사용한 폴더 삭제 유무 check

       : 기본적으로 삭제되어야 하지만, 확인 작업등이 필요할까봐 옵션 생성

 2-3. 생성된 압축 파일 경로 열기 추가

       : 생성된 파일 확인하기 위해서

 2-4. 오류 메세지, 로그 상태 표기창 추가

 

 

tkinter의 기능들에서 막힌다면 이전 글을 참고해보자.

https://whosetech.tistory.com/32

 

[Python 파이썬 독학 활용2편 1일차] GUI(tkinter) - 1-1

[1일차] 공부내용 정리 1. 소개   2. 활용편2 소개   3. 기본 프레임   4. 버튼   5. 레이블   6. 텍스트 & 엔트리   7. 리스트 박스   8. 체크 버튼   9. 라디오 버튼   10 ...

whosetech.tistory.com

https://whosetech.tistory.com/35

 

[Python 파이썬 독학 활용2편 2일차] GUI(tkinter) - 2-1

[2일차] 공부내용 정리   12. 메뉴   13. 메시지 박스   14. 프레임   15. 스크롤 바   16. 그리드 기본   17. 그리드 심화   18. 퀴즈 (메모장 만들기) 12. 메뉴 from tkinter import..

whosetech.tistory.com

https://whosetech.tistory.com/39

 

[Python 파이썬 독학 활용2편 3일차] GUI(tkinter) - 3-1

[3일차]   19. 프로젝트 (이미지 합치기 프로그램 만들기)   20. 레이아웃 전반전   21. 레이아웃 후반전   22. 레이아웃 연장전   23. 파일 추가 & 선택 삭제   24. 저장 경로  ..

whosetech.tistory.com

 

 

 

UI 전체 코드

from tkinter import *
import tkinter.ttk as ttk


def load_target_directory():
    pass

def search_target_files():
    pass

def target_file_oepn():
    pass

def target_file_del():
    pass

def target_file_zip():
    pass

def open_root_folder():
    pass
    
def backup_quit():
    pass




root = Tk()
root.title("New File Backup To ZIP")

root.geometry("400x600") # 가로 X 세로 / 대문자X 하면 실행안됨
root.resizable(True,True)


directory_frame = Frame(root)
directory_frame.pack(fill="x", padx=5, pady=15)

directory_frame1 = Frame(directory_frame)
directory_frame1.pack(fill="x", padx=5, pady=15)



target_directory_oepn_desc = Label(directory_frame1, text="1_Backup 경로 불러오기", anchor="w")
target_directory_oepn_desc.pack(fill="x", padx=5)

btn_target_directory_path = Button(directory_frame1, text="찾아보기", width=10, command=load_target_directory)
btn_target_directory_path.pack(side="left", padx=5)

global target_dest_path
target_dest_path = Entry(directory_frame1, state="disable")
target_dest_path.pack(side="right", fill="x",padx=5,expand=True)







# body frame
body_frame = Frame(root)
body_frame.pack()

body_frame0 = Frame(body_frame)
body_frame0.pack()


body_frame1 = Frame(body_frame)
body_frame1.pack()


body_frame2 = Frame(body_frame)
body_frame2.pack()


body_frame3 = Frame(body_frame)
body_frame3.pack()


body_frame4 = Frame(body_frame)
body_frame4.pack()


body_frame5 = Frame(body_frame)
body_frame5.pack()


body_frame6 = Frame(body_frame)
body_frame6.pack()


body_frame7 = Frame(body_frame)
body_frame7.pack()

###########
search_period = Label(body_frame1,text="2. 검색 날짜 조회 : D - ", anchor="w", width=20)
search_period.pack(side=LEFT)

search_period_input = Entry(body_frame1,  width=10)
search_period_input.pack(side=LEFT, expand=True, fill="both")

day_label = Label(body_frame1,text=" 일", anchor="w", width=5)
day_label.pack(side=LEFT)


# D- ? 일 수정 및 신규 파일 검색 버튼
btn_search_target_files = Button(body_frame1, text="대상 조회", width=14, command=search_target_files)
btn_search_target_files.pack(side="left", fill ="both", padx=2, expand=True)


# 검색 시간 설명
period_info = Label(body_frame2,text="*ex) D-0 : 오늘 / D - 1 : 어제 ~ 오늘", anchor="w", width=50)
period_info.pack(side="top")



# 대상파일 리스트 view
target_file_list_view_frame = Frame(body_frame2)
target_file_list_view_frame.pack(fill="both", padx=5, pady=5)

scrollbar_target_file_x = Scrollbar(target_file_list_view_frame, orient="horizontal")
scrollbar_target_file_x.pack(side="bottom", fill="x")


scrollbar_target_file_y = Scrollbar(target_file_list_view_frame)
scrollbar_target_file_y.pack(side="right", fill="y")

target_file_list = Listbox(target_file_list_view_frame, selectmode="extended", height=5, width= 50 ,xscrollcommand=scrollbar_target_file_x.set, yscrollcommand=scrollbar_target_file_y.set)
target_file_list.pack(side="left", fill="both", expand=True)
scrollbar_target_file_x.config(command=target_file_list.xview)
scrollbar_target_file_y.config(command=target_file_list.yview)



format_info = Label(body_frame2,text="대상 확장자 : jpg, png, bmp, pdf, xlsx", anchor="w", width=50)
format_info.pack(side=BOTTOM)

# 파일 열기 / 파일 삭제
# # 항목 확인 버튼
btn_target_file_oepn = Button(body_frame3, text="파일 확인", width=14, command=target_file_oepn)
btn_target_file_oepn.pack(side="left", fill ="both", padx=2, pady= 10, expand=True)


# # 항목 제거 버튼
btn_target_file_del = Button(body_frame3, text="파일 제거", width=14, command=target_file_del)
btn_target_file_del.pack(side="right", fill ="both", padx=2, pady= 10, expand=True)



# 압축 후, temp 폴더 삭제 유무
input_temp_del_value = IntVar()
input_temp_del = Checkbutton(body_frame4, text="압축 후, temp 폴더 삭제(Check : 삭제 / Uncheck : 유지)", variable=input_temp_del_value)
input_temp_del.pack(anchor="w")



# 압축 버튼
btn_target_file_zip = Button(body_frame5, text="temp 폴더 압축하기", width=30, command=target_file_zip)
btn_target_file_zip.pack(side="right", fill ="both", padx=2, pady=5, expand=True)


# 압축파일 경로 열기 
btn_open_root_folder = Button(body_frame6, text="temp.zip 경로 열기", width=30, command=open_root_folder)
btn_open_root_folder.pack(side="right", fill ="both", padx=2, pady=5, expand=True)


# backup 프로그램 종료
btn_backup_exit = Button(body_frame7, text="프로그램 종료하기", width=30, command=backup_quit)
btn_backup_exit.pack(side="right", fill ="both", padx=2, pady=5, expand=True)




##############
# log_and_button frame(right)
body_frame = Frame(body_frame)
body_frame.pack(side="right", fill="x", anchor="n")



bottom_frame = Frame(root)
bottom_frame.pack()

bottom_frame1 = Frame(bottom_frame)
bottom_frame1.pack()
# log frame
log_title_desc = Label(bottom_frame1, text="※ Log 및 진행상태 확인", anchor="w", width=45)
log_title_desc.pack(side="top")

log_frame = Frame(body_frame)
log_frame.pack()



bottom_frame2 = Frame(bottom_frame)
bottom_frame2.pack()


scrollbar_log_text_view_x = Scrollbar(bottom_frame2, orient="horizontal")
scrollbar_log_text_view_x.pack(side="bottom", fill="x")


scrollbar_log_text_view_y = Scrollbar(bottom_frame2)
scrollbar_log_text_view_y.pack(side="right", fill="y")


log_text_view = Text(bottom_frame2, height=20, width=50, xscrollcommand=scrollbar_log_text_view_x.set, yscrollcommand=scrollbar_log_text_view_y.set)
log_text_view.pack(fill="x",padx=5, pady=5, ipady=4)
scrollbar_log_text_view_x.config(command=log_text_view.xview)
scrollbar_log_text_view_y.config(command=log_text_view.yview)

root.mainloop()

 

 

 

 

반응형

관련글 더보기

댓글 영역