티스토리 뷰
728x90
import tkinter.ttk as ttk
import tkinter.messagebox as msgbox
from tkinter import *
from tkinter import filedialog
from PIL import Image
import os
root = Tk()
root.title("자료구조 GUI")
# 이미지 통합
def merge_image():
#print(list_file.get(0, END))
images = [Image.open(x) for x in list_file.get(0,END)]
widths = [x.size[0] for x in images]
heights = [x.size[1] for x in images]
max_width, total_height = max(widths), sum(heights)
result_img=Image.new("RGB", (max_width, total_height), (255, 255, 255))
y_offset = 0
# for img in images:
# result_img.paste(img, (0, y_offset))
# y_offset += img.size[1]
for idx, img in enumerate(images):
result_img.paste(img, (0,y_offset))
y_offset +=img.size[1]
progress = (idx+1) / len(images) * 100
p_var.set(progress)
progress_bar.update()
dest_path = os.path.join(txt_dest_path.get(), "result.png")
# dest_path = C:\Users\user\Desktop\VScode\reslut.png
result_img.save(dest_path)
msgbox.showinfo("알림", "작업이 완료되었습니다")
# 파일 추가!!
def add_file():
files=filedialog.askopenfilenames(title="이미지 파일을 선택",
filetype=(("그림파일", "*.png"), ("모든파일", "*.*"))
, initialdir=r"C:\Users")
for file in files:
list_file.insert(END, file)
#파일 삭제!!
def del_file():
for index in reversed(list_file.curselection()):
list_file.delete(index)
# 저장 경로(찾아보기, 폴더)
def browse_dest_path():
folder_selected = filedialog.askdirectory()
if folder_selected is None: #취소때 함수 종료
return
txt_dest_path.delete(0, END)
txt_dest_path.insert(0, folder_selected)
def start():
print("가로넓이:", cmb_width.get())
print("간격:", cmb_space.get())
print("포맷:", cmb_format.get())
if list_file.size()==0:
msgbox.showwarning("경고", "이미지 파일을 추가하세요.")
elif len(txt_dest_path.get()) == 0:
msgbox.showwarning("경고", "저장 경로를 선택하세요.")
merge_image()
# 파일 프레임 (파일 추가, 선택 삭제)
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="파일추가", command=add_file)
btn_add_file.pack(side="left")
btn_del_file = Button(file_frame, padx=5, pady=5, width=12,
text="선택삭제",command=del_file)
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", expand=True, padx=5, pady=5, ipady=4) # 높이 변경
btn_dest_path = Button(path_frame, text="찾아보기", width=10,
command = browse_dest_path )
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, command=start)
btn_start.pack(side="right", padx=5, pady=5)
root.resizable(False, False)
root.mainloop()
'프로그래밍 > python' 카테고리의 다른 글
[Python] zoom 자동으로 들어가서 채팅치기 (0) | 2020.09.14 |
---|---|
[Python]공유기 사용자에게 패킷 보내고 받기 (0) | 2020.09.08 |
[Python] 간단한 게임 제작 (6) | 2020.07.02 |
[Python] 똥피하기 게임 제작하기 (1) | 2020.05.23 |
[Python] 파일에 있는 여러 문서를 불러와 내용 바꾸기 (0) | 2020.05.18 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 크롤링
- 1251
- SMTP
- 문제풀이
- 1252
- 사칙연산
- Codeup
- 코드설명
- 1253
- pygame
- 1254
- 아나콘다
- Anaconda
- Python
- 코드업
- JavaScript
- 주석
- django
- 바닐라 javascript
- 2022.02.05
- 타이탄의도구들
- 도전
- 1255
- localstorage
- promise반환
- notion api
- 바닐라 js
- 티처블 머신
- 컨트롤타임
- 꿈두레
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함