python_GUI
폴더내이미지순환
python_DV
2023. 1. 29. 18:04
728x90
from tkinter import *
from PIL import ImageTk, Image
from tkinter import messagebox
from tkinter import filedialog
import os
import time
from numpy.random import choice
def choose():
global folder_choose
folder_choose = filedialog.askdirectory(initialdir='path', title='select folder')
if folder_choose == '':
messagebox.showwarning("경고", "폴더를 선택하세요")
input_entry.delete(0.0, END)
input_entry.insert(INSERT, folder_choose)
WhileBreak = False
def while_break():
global WhileBreak
WhileBreak = True
def show_xl():
radSel=radVar.get()
if radSel==1:
while True:
image_files = os.listdir(folder_choose)
for image_file in image_files:
scr = Image.open(folder_choose +"/"+ image_file)
resize_scr1=scr.resize((int(scr.width / int(float(r2.get()))), int(scr.height / int(float(r2.get())))))
Deathwing2=ImageTk.PhotoImage(resize_scr1)
CanV=canv.create_image(10, 10, anchor=NW, image=Deathwing2)
canv.itemconfigure(CanV, image=Deathwing2)
canv.image_names = Deathwing2
canv.update()
time.sleep(int(retime_entry.get()))
global WhileBreak
if WhileBreak:
break
if WhileBreak:
WhileBreak = False
break
elif radSel==2:
while True:
image_files = os.listdir(folder_choose)
image_file = choice(image_files)
scr = Image.open(folder_choose +"/"+ image_file)
resize_scr1=scr.resize((int(scr.width / int(float(r2.get()))), int(scr.height / int(float(r2.get())))))
Deathwing2=ImageTk.PhotoImage(resize_scr1)
CanV=canv.create_image(10, 10, anchor=NW, image=Deathwing2)
canv.itemconfigure(CanV, image=Deathwing2)
canv.image_names = Deathwing2
canv.update()
time.sleep(int(retime_entry.get()))
if WhileBreak:
WhileBreak = False
break
win = Tk()
text= Text(win,wrap=WORD)
win.geometry("350x600+1000+0") #340x250+3480+30
win.title('circulation_image')
ch_csvtoxl=LabelFrame(win, text='folder_selection')
ch_csvtoxl.grid(column=0, columnspan=3, row=0, padx=8, pady=5)
chlb=Label(ch_csvtoxl, text="폴더선택:",width=8).grid(column=0, row=0,sticky='W')
input_entry= Text(ch_csvtoxl, height=2, width=35, wrap=WORD)
input_entry.grid(column=1,columnspan=3, row=0,sticky='W')
lbID4=Label(ch_csvtoxl, text="",width=1).grid(column=4, row=0,sticky='W')
b1 = Button(ch_csvtoxl,text="선택",width=10, command=choose).grid(column=1, row=1,sticky='W')
b2 = Button(ch_csvtoxl,text="시작",width=10, command=show_xl).grid(column=2, row=1,sticky='W')
b3 = Button(ch_csvtoxl,text="중지",width=10, command=while_break).grid(column=3, row=1,sticky='E')
repeat_time=LabelFrame(win, text='repeat_time')
repeat_time.grid(column=1, row=1, padx=8, pady=5)
retime=Label(repeat_time, text="초",width=3).grid(column=1, row=0,sticky='W')
retime_entry= Entry(repeat_time, width=6)
retime_entry.grid(column=0, row=0,sticky='E')
radVar=IntVar()
repeat_style=LabelFrame(win, text='repeat_style')
repeat_style.grid(column=0, row=1, padx=8, pady=5)
restyle1=Radiobutton(repeat_style, text="in order", variable=radVar, value=1).grid(column=0, row=0,sticky='W')
restyle2=Radiobutton(repeat_style, text="random", variable=radVar, value=2).grid(column=0, row=1,sticky='W')
resize_master=LabelFrame(win, text='resize_image')
resize_master.grid(column=2, row=1, padx=3, pady=3)
lbID=Label(resize_master, text="n=",width=3).grid(column=0, row=0,sticky='W')
r2=Entry(resize_master,width=6)
r2.grid(column=1, row=0,sticky='W')
lbID4=Label(resize_master, text="(원본/n)",width=6).grid(column=1, row=1,sticky='W')
can_vas=LabelFrame(win, text='image_show')
can_vas.grid(column=0,columnspan=3, row=3, padx=8, pady=5)
canv = Canvas(can_vas, width=300, height=400, bg='white')
canv.pack(fill=BOTH,expand=YES)
win.mainloop()
728x90
반응형