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
반응형