# `gui/view.py` ## Propósito Vista principal basada en `customtkinter` que define la interfaz de procesamiento y expone métodos para enlazar callbacks y comunicar estado. ## API pública ### `class InvoiceAppView` - `set_on_select_root(cb)`, `set_on_process(cb)`, `set_on_select_csv(cb)` - Getters: `get_root_path()`, `get_keywords()`, `get_fields()`, `get_csv_path()` - Output: `append_output(text)`, `append_output_safe(text)` - Estado: `set_processing(bool)` ### Keywords / patrones de archivos - En la pestaña principal, cada Tipo de Documento tiene un campo de **Keyword/Patrón**. - Se aceptan tanto palabras simples (sin `*` ni `?`) como patrones tipo Windows con `*` y `?`. - Si el patrón **no incluye extensión**, se aplica sobre el nombre sin extensión y solo se consideran archivos `.pdf`, `.tif`, `.tiff`. - Si el patrón **incluye extensión** válida (p. ej. `*_OK?.pdf`), se aplica sobre el nombre completo respetando esa extensión. ## Ejemplo ```python from gui.view import InvoiceAppView view = InvoiceAppView() view.set_on_process(lambda: print("Procesar!")) view.mainloop() ```