상세 컨텐츠

본문 제목

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

파이썬 스터디/파이썬-Python 활용편2

by 후즈테크 2021. 8. 4. 09:03

본문

반응형

[3일차]

    19. 프로젝트 (이미지 합치기 프로그램 만들기) 
    20. 레이아웃 전반전 
    21. 레이아웃 후반전 
    22. 레이아웃 연장전 
    23. 파일 추가 & 선택 삭제 
    24. 저장 경로 
    25. 자동 스크린샷 
    26. 이미지 합치기 

 

 

19. 프로젝트

 주의사항

    프로그램 제작에 앞서 필요한 기능 구현과 사용설명에 대한 부분이다. 기획이라고 보는게 더 맞을 것 같다.

    실제 사용자가 원하는 기능과 과정에 대한 고민이 완료되면 다음 단계로 ㄱㄱ

반응형

 

 

 

20~22 통합 정리

20-1 . 레이아웃 전반전(기본)

from tkinter import *
import tkinter.ttk as ttk

root = Tk()
root.title("WT GUI")



# # 파일 프레임(파일 추가, 선택 삭제)

file_frame = Frame(root)
file_frame.pack(fill="x")

btn_add_file = Button(file_frame, padx=5, pady=5, width=12, text ="파일추가")
btn_add_file.pack(side="left")

btn_del_file = Button(file_frame, padx=5, pady=5, width=12, text="선택삭제")
btn_del_file.pack(side="right")

# 리스트 프레임
list_frame = Frame(root)
list_frame.pack(fill="both")

scrollbar = Scrollbar(list_frame)
scrollbar.pack(side="right", fill="y")

list_file = Listbox(list_frame, selectmode="extended", height=15, yscrollcommand=scrollbar.set)
list_file.pack(side="left", fill="both", expand=True)
scrollbar.config(command=list_file.yview)

# 저장 경로 프레임
path_frame = LabelFrame(root, text="저장경로")
path_frame.pack(fill="x")

txt_dest_path = Entry(path_frame)
txt_dest_path.pack(side="left", fill="x", expand=True, ipady=4)

btn_dest_path = Button(path_frame, text="찾아보기", width=10)
btn_dest_path.pack(side="right")


# 옵션 프레임
frame_option = LabelFrame(root, text="옵션")
frame_option.pack()


#1. 가로 넓이 옵션

# 가로 넓이 레이블
lbl_width = Label(frame_option, text ="가로넓이" , width=8)
lbl_width.pack(side="left")

# 가로 넓이 콤보

opt_width = ["원본유지", "1024", "800", "640"]
cmb_width = ttk.Combobox(frame_option, state="readonly", values = opt_width, width=10)

cmb_width.current(0)
cmb_width.pack(side="left")


#2. 간격 옵션

# 간격 옵션 레이블

lbl_space = Label(frame_option, text ="간격" , width=8)
lbl_space.pack(side="left")

# 간격 옵션 콤보
opt_space = ["없음", "좁게", "보통", "넓게"]
cmb_space = ttk.Combobox(frame_option, state="readonly", values = opt_space, width=10)

cmb_space.current(0)
cmb_space.pack(side="left")



#3. 파일 포맷 옵션

# 파일포맷 옵션 레이블

lbl_format = Label(frame_option, text ="포맷" , width=8)
lbl_format.pack(side="left")

# 간격 옵션 콤보
opt_format = ["PNG","JPG","BMP"]
cmb_format = ttk.Combobox(frame_option, state="readonly", values = opt_format, width=10)

cmb_format.current(0)
cmb_format.pack(side="left")


# 진행상황 progress Bar
frame_progress = LabelFrame(root, text="진행상황")
frame_progress.pack(fill="x")


p_var = DoubleVar()
progress_bar = ttk.Progressbar(frame_progress, maximum=100, variable=p_var)
progress_bar.pack(fill="x")


# 실행 프레임
frame_run = Frame(root)
frame_run.pack(fill="x")


btn_close = Button(frame_run, padx=5, pady=5, text="종료", width=12, command=root.quit)
btn_close.pack(side="right")

btn_start = Button(frame_run, padx=5, pady=5, text="시작", width=12)
btn_start.pack(side="right")



root.resizable(False,False) # x너비, y 변경 불가
root.mainloop()

주의사항

 - pack 형식으로 디자인구성

 - frame(파랑) 별로 구별하여 구성. 

 - widget(빨강) 별로 구별하여 구성

20-2. 레이아웃 전반전 수정 1차

 - frame 간 pad 값 추가

from tkinter import *
import tkinter.ttk as ttk

root = Tk()
root.title("WT GUI")



# # 파일 프레임(파일 추가, 선택 삭제)

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

btn_add_file = Button(file_frame, padx=5, pady=5, width=12, text ="파일추가")
btn_add_file.pack(side="left")

btn_del_file = Button(file_frame, padx=5, pady=5, width=12, text="선택삭제")
btn_del_file.pack(side="right")

# 리스트 프레임
list_frame = Frame(root)
list_frame.pack(fill="both", padx=5, pady=5)

scrollbar = Scrollbar(list_frame)
scrollbar.pack(side="right", fill="y")

list_file = Listbox(list_frame, selectmode="extended", height=15, yscrollcommand=scrollbar.set)
list_file.pack(side="left", fill="both", expand=True)
scrollbar.config(command=list_file.yview)

# 저장 경로 프레임
path_frame = LabelFrame(root, text="저장경로")
path_frame.pack(fill="x", padx=5, pady=5, ipady=5)

txt_dest_path = Entry(path_frame)
txt_dest_path.pack(side="left", fill="x",padx=5, pady=5,expand=True, ipady=4)

btn_dest_path = Button(path_frame, text="찾아보기", width=10)
btn_dest_path.pack(side="right", padx=5, pady=5)


# 옵션 프레임
frame_option = LabelFrame(root, text="옵션")
frame_option.pack(padx=5, pady=5, ipady=5)


#1. 가로 넓이 옵션

# 가로 넓이 레이블
lbl_width = Label(frame_option, text ="가로넓이" , width=8)
lbl_width.pack(side="left", padx=5, pady=5)

# 가로 넓이 콤보

opt_width = ["원본유지", "1024", "800", "640"]
cmb_width = ttk.Combobox(frame_option, state="readonly", values = opt_width, width=10)

cmb_width.current(0)
cmb_width.pack(side="left", padx=5, pady=5)


#2. 간격 옵션

# 간격 옵션 레이블

lbl_space = Label(frame_option, text ="간격" , width=8)
lbl_space.pack(side="left", padx=5, pady=5)

# 간격 옵션 콤보
opt_space = ["없음", "좁게", "보통", "넓게"]
cmb_space = ttk.Combobox(frame_option, state="readonly", values = opt_space, width=10)

cmb_space.current(0)
cmb_space.pack(side="left", padx=5, pady=5)



#3. 파일 포맷 옵션

# 파일포맷 옵션 레이블

lbl_format = Label(frame_option, text ="포맷" , width=8)
lbl_format.pack(side="left", padx=5, pady=5)

# 간격 옵션 콤보
opt_format = ["PNG","JPG","BMP"]
cmb_format = ttk.Combobox(frame_option, state="readonly", values = opt_format, width=10)

cmb_format.current(0)
cmb_format.pack(side="left", padx=5, pady=5)


# 진행상황 progress Bar
frame_progress = LabelFrame(root, text="진행상황")
frame_progress.pack(fill="x", padx=5, pady=5, ipady=5)


p_var = DoubleVar()
progress_bar = ttk.Progressbar(frame_progress, maximum=100, variable=p_var)
progress_bar.pack(fill="x", padx=5, pady=5)


# 실행 프레임
frame_run = Frame(root)
frame_run.pack(fill="x", padx=5, pady=5)


btn_close = Button(frame_run, padx=5, pady=5, text="종료", width=12, command=root.quit)
btn_close.pack(side="right", padx=5, pady=5)

btn_start = Button(frame_run, padx=5, pady=5, text="시작", width=12)
btn_start.pack(side="right", padx=5, pady=5)



root.resizable(False,False) # x너비, y 변경 불가
root.mainloop()

주의사항

 - frame 간의 side, fill, expand, pad 등의 option 으로 시각적으로 깔끔하게 구성하는 능력이 필요할 것 같다.

 

 

20-3 주요 설정

 - opt_width = ["원본유지", "1024", "800", "640"]
 - cmb_width = ttk.Combobox(frame_option, state="readonly", values = opt_width, width=10)

    : state = "readonly" 를 통해 읽기 권한만 할당하여 사용자가 만들 수 있는 오류 요소를 제거한다.

    : Combobox의 valus 값을 리스트를 통해 전달 할 수 있다.

 - cmb_space.current(0)

    : 해당 리스트의 index 0 번째 값을 기본 값으로 설정

 

 

  

반응형

관련글 더보기

댓글 영역