app.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import logging
  2. import queue
  3. import signal
  4. from tkinter import HORIZONTAL, VERTICAL, messagebox, ttk
  5. from qhandler import QueueHandler
  6. from ui.console import ConsoleUi
  7. from ui.forms import FormUi
  8. from ui.status import StatusUi
  9. logger = logging.getLogger('simsdt')
  10. class App:
  11. def __init__(self, root):
  12. self.root = root
  13. # Queue a nivel de App para manejar el progress bar
  14. pbqueue = queue.Queue()
  15. log_queue = queue.Queue()
  16. self.queue_handler = QueueHandler(log_queue)
  17. formatter = logging.Formatter(
  18. '%(asctime)s: %(message)s', datefmt='%Y-%m-%dT%H:%M:%S')
  19. self.queue_handler.setFormatter(formatter)
  20. # self.queue_handler.setLevel(logging.INFO)
  21. logger.addHandler(self.queue_handler)
  22. root.title('SimSDT')
  23. root.iconbitmap("app.ico")
  24. root.columnconfigure(0, weight=1)
  25. root.rowconfigure(0, weight=1)
  26. # root.geometry("1080x960")
  27. # Create the panes and frames
  28. vertical_pane = ttk.PanedWindow(
  29. self.root, orient=VERTICAL)
  30. vertical_pane.grid(row=0, column=0, sticky="nsew", padx=10, pady=10)
  31. main_title = ttk.Label(
  32. vertical_pane,
  33. text='Simulación de Subastas de Derechos de Transmisión',
  34. font=('', '20', 'bold'), padding=(0, 5))
  35. vertical_pane.add(main_title, weight=0)
  36. horizontal_pane = ttk.PanedWindow(vertical_pane, orient=HORIZONTAL)
  37. vertical_pane.add(horizontal_pane, weight=1)
  38. form_frame = ttk.Labelframe(
  39. horizontal_pane, text="Configuración", padding=(5, 5))
  40. form_frame.columnconfigure(1, weight=1)
  41. horizontal_pane.add(form_frame, weight=1)
  42. console_frame = ttk.Labelframe(
  43. horizontal_pane, text="Consola", padding=(5, 5))
  44. console_frame.columnconfigure(0, weight=1)
  45. console_frame.rowconfigure(0, weight=1)
  46. horizontal_pane.add(console_frame, weight=1)
  47. third_frame = ttk.Labelframe(
  48. vertical_pane, text="Estado", padding=(5, 5))
  49. vertical_pane.add(third_frame, weight=0)
  50. # Initialize all frames
  51. self.form = FormUi(form_frame, pbqueue)
  52. self.console = ConsoleUi(console_frame, log_queue, self.queue_handler)
  53. self.third = StatusUi(third_frame, pbqueue)
  54. self.root.protocol('WM_DELETE_WINDOW', self.quit)
  55. self.root.bind('<Control-q>', self.quit)
  56. signal.signal(signal.SIGINT, self.quit)
  57. def quit(self, *args):
  58. msg = 'Se esta ejecutando un proceso de optimización\n\n'
  59. msg += '¿Desea salir de la aplicación?'
  60. if self.form.runsdt_thread and self.form.runsdt_thread.is_alive():
  61. if messagebox.askokcancel("Salir de SimSDT", msg):
  62. logger.info('Cerrando aplicacion SimSDT')
  63. self.form.runsdt_thread.stop()
  64. self.root.destroy()
  65. else:
  66. logger.info('Saliendo de la aplicacion')
  67. self.root.destroy()