import logging import tkinter as tk from tkinter import E, W, filedialog, ttk from PIL import Image, ImageTk from simsdt.runtrhead import RunsdtThread from simsdt.utils.excel_checker import check_excel_file from simsdt.utils.solver_checker import check_solver main_logger = logging.getLogger('simsdt') class FormUi: runsdt_thread = None def __init__(self, frame, q): self.frame = frame self.q = q image = Image.open('img/icons/icons8-play-16.png') self.photo = ImageTk.PhotoImage(image) opfile = Image.open('img/icons/icons8-abrir-carpeta-16.png') self.opfile = ImageTk.PhotoImage(opfile) # Add a text field for file path self.file_path = tk.StringVar() ttk.Label(self.frame, text='Archivo:').grid( column=0, row=0, sticky=W, pady=(5, 5), padx=(0, 10)) self.entry = ttk.Entry(self.frame, textvariable=self.file_path, width=50) self.entry.grid(column=1, row=0, sticky=(W, E), pady=(5, 5)) self.button = ttk.Button( self.frame, image=self.opfile, compound='center', command=self.open_file_dialog, width=3) self.button.grid(column=2, row=0, sticky=W) self.button_run = ttk.Button(self.frame, image=self.photo, compound="right", text='Ejecutar', command=self.run) self.button_run.grid(column=1, row=1, sticky=W) def open_file_dialog(self): # Open file dialog try: file = filedialog.askopenfilename( filetypes=[('Excel', '.xlsx')], title='Seleccione un archivo de subasta...') check_excel_file(file) except Exception as e: main_logger.error(e) self.file_path.set('') else: main_logger.info(f'Archivo seleccionado: {file}') self.file_path.set(file) def run(self): try: if not self.file_path.get(): main_logger.error( 'Debe seleccionar un archivo para ejecutarlo') return check_solver() self.button_run.configure(state='disabled') main_logger.info('Ejecutando') self.runsdt_thread = RunsdtThread(args=(self.file_path.get())) self.runsdt_thread.start() self.check_thread() except Exception as e: main_logger.error(e) return def check_thread(self): if not self.runsdt_thread.is_alive(): self.button_run.configure(state='normal') self.q.put(False) else: self.q.put(True) self.frame.after(100, self.check_thread)