forms.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import logging
  2. import tkinter as tk
  3. from tkinter import E, W, filedialog, ttk
  4. from PIL import Image, ImageTk
  5. from simsdt.runtrhead import RunsdtThread
  6. from simsdt.utils.excel_checker import check_excel_file
  7. from simsdt.utils.solver_checker import check_solver
  8. main_logger = logging.getLogger('simsdt')
  9. class FormUi:
  10. runsdt_thread = None
  11. def __init__(self, frame, q):
  12. self.frame = frame
  13. self.q = q
  14. image = Image.open('img/icons/icons8-play-16.png')
  15. self.photo = ImageTk.PhotoImage(image)
  16. opfile = Image.open('img/icons/icons8-abrir-carpeta-16.png')
  17. self.opfile = ImageTk.PhotoImage(opfile)
  18. # Add a text field for file path
  19. self.file_path = tk.StringVar()
  20. ttk.Label(self.frame, text='Archivo:').grid(
  21. column=0, row=0, sticky=W, pady=(5, 5), padx=(0, 10))
  22. self.entry = ttk.Entry(self.frame, textvariable=self.file_path,
  23. width=50)
  24. self.entry.grid(column=1, row=0, sticky=(W, E), pady=(5, 5))
  25. self.button = ttk.Button(
  26. self.frame, image=self.opfile, compound='center',
  27. command=self.open_file_dialog, width=3)
  28. self.button.grid(column=2, row=0, sticky=W)
  29. self.button_run = ttk.Button(self.frame, image=self.photo,
  30. compound="right", text='Ejecutar',
  31. command=self.run)
  32. self.button_run.grid(column=1, row=1, sticky=W)
  33. def open_file_dialog(self):
  34. # Open file dialog
  35. try:
  36. file = filedialog.askopenfilename(
  37. filetypes=[('Excel', '.xlsx')],
  38. title='Seleccione un archivo de subasta...')
  39. check_excel_file(file)
  40. except Exception as e:
  41. main_logger.error(e)
  42. self.file_path.set('')
  43. else:
  44. main_logger.info(f'Archivo seleccionado: {file}')
  45. self.file_path.set(file)
  46. def run(self):
  47. try:
  48. if not self.file_path.get():
  49. main_logger.error(
  50. 'Debe seleccionar un archivo para ejecutarlo')
  51. return
  52. check_solver()
  53. self.button_run.configure(state='disabled')
  54. main_logger.info('Ejecutando')
  55. self.runsdt_thread = RunsdtThread(args=(self.file_path.get()))
  56. self.runsdt_thread.start()
  57. self.check_thread()
  58. except Exception as e:
  59. main_logger.error(e)
  60. return
  61. def check_thread(self):
  62. if not self.runsdt_thread.is_alive():
  63. self.button_run.configure(state='normal')
  64. self.q.put(False)
  65. else:
  66. self.q.put(True)
  67. self.frame.after(100, self.check_thread)