python_GUI

엑셀DB순환

python_DV 2023. 1. 29. 18:03
728x90

from tkinter import *
from tkinter import scrolledtext
from tkinter import messagebox
from tkinter import filedialog
from openpyxl import load_workbook
import time
from numpy.random import choice

def choose():
    file_name1 = filedialog.askopenfilename(initialdir='path', title='select file', 
    filetypes=(('*xlsx', '*.xlsx'),('all files', '*.*')))
    global files
    files=file_name1
    if files == '':
                messagebox.showwarning("경고", "파일을 추가 하세요")
    input_entry.delete(0.0, END)
    input_entry.insert(INSERT, files)  


def show_data(c_data):
    scr.delete(0.0, END)
    scr.insert(INSERT,c_data.value)
    scr.update() #gui에 새로운 요소가 노출 될 수 있도록 해 줌

WhileBreak = False

def while_break():
    global WhileBreak
    WhileBreak = True
    print("check2: ", WhileBreak)
    

def show_xl():
    radSel=radVar.get()
    if radSel==1:
        while True: 
            for row in load_workbook(files)['Sheet1']:
                for cell_data in row:
                    show_data(cell_data)

                    time.sleep(int(retime_entry.get()))
                    global WhileBreak
                    print("check1: ", WhileBreak)
                    if WhileBreak:
                        break
                if WhileBreak:
                    break            
            if WhileBreak:
                WhileBreak = False
                break       
            
    elif radSel==2:
        while True:
            cell_data =choice(load_workbook(files)['Sheet1']['a'])
            show_data(cell_data)
            
            time.sleep(int(retime_entry.get()))
            
            if WhileBreak:
                WhileBreak = False
                break 
    


win = Tk()
text= Text(win,wrap=WORD)

win.geometry("350x450+1000+0") #340x250+3480+30
win.title('circulation_word')
ch_csvtoxl=LabelFrame(win, text='file_selection')
ch_csvtoxl.grid(column=0, columnspan=2, 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=8).grid(column=0, row=0,sticky='W')
retime_entry= Entry(repeat_time, width=14)
retime_entry.grid(column=1, row=0,sticky='W')

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=1, row=0,sticky='W')

scr = scrolledtext.ScrolledText(win, width=44, height=20, wrap=WORD)
scr.grid(column=0,columnspan=2, row=2)
scr.config(font=("Consolas", 9))

win.mainloop()
728x90
반응형