-
Notifications
You must be signed in to change notification settings - Fork 0
Creacion de un widget
La VirtualWindow
es una clase personalizada basada en CTkFrame
(de CustomTkinter
) que permite la gestión de widgets de manera dinámica, incluyendo agregar, mover, alinear, copiar, pegar y exportar la configuración de los widgets. A continuación, se describe paso a paso el proceso de cómo se agregan widgets a la VirtualWindow
y las diferentes formas en que esto puede hacerse.
Existen tres formas principales de agregar widgets a la VirtualWindow
:
- Agregar widgets programáticamente utilizando el método
add_widget
. - Pegar widgets copiados con
paste_widget
. - Importar widgets desde un código o archivo con
import_from_codebox
oimport_from_file
.
El método add_widget
es la forma más directa de agregar un widget a la VirtualWindow
. Este método:
- Recibe el tipo de widget (
widget_type
) y sus argumentos opcionales (kwargs
). - Llama al método
create_widget
para crear una instancia del widget según su tipo. - Si el widget es creado con éxito, utiliza
_extracted_from_create_and_place_widget_5
para colocarlo en el centro de la ventana y hacerlo movible y seleccionable.
-
Entrada:
virtual_window.add_widget("CTkButton", text="Botón de prueba")
-
Proceso interno:
- Llama a
create_widget("CTkButton", text="Botón de prueba")
para instanciar el widget. - Posiciona el widget en el centro de la ventana (
x = ancho_ventana/2 - ancho_widget/2
,y = altura_ventana/2 - altura_widget/2
). - Configura el widget para que sea:
- Movible: A través del método
make_widget_movable
. - Seleccionable: A través del método
make_widget_selectable
.
- Movible: A través del método
- Agrega el widget a la lista interna
self.widgets
.
- Llama a
-
Resultado: El widget es visible en el centro de la
VirtualWindow
, es movible y seleccionable.
El método paste_widget
permite reutilizar widgets copiados anteriormente en el portapapeles (self.clipboard
).
-
Entrada:
- Copiar un widget con
Control+C
(o utilizando un método de copia). - Pegar el widget con
paste_widget
.
- Copiar un widget con
-
Proceso interno:
- Llama a
add_widget
con el tipo y los parámetros del widget en el portapapeles. - El widget se coloca inicialmente en el centro de la ventana.
- Llama a
-
Resultado: Un duplicado del widget es colocado en la
VirtualWindow
.
Los métodos import_from_codebox
e import_from_file
permiten cargar widgets desde código Python o archivos previamente exportados.
-
Limpieza del estado previo:
- Llama a
clean_virtual_window
para eliminar los widgets actuales. - Limpia guías y referencias de widgets.
- Llama a
-
Parseo del código:
- Analiza el código proporcionado con
ast.parse
. - Busca y extrae la clase
App
y la funcióngeneric_widget_creator
.
- Analiza el código proporcionado con
-
Creación y colocación:
- Llama a
process_widget_calls
para procesar las llamadas de creación y colocación de widgets en el código. - Utiliza
create_and_place_widget
para instanciar cada widget y colocarlo en las posiciones especificadas en el código.
- Llama a
- Resultado: Los widgets definidos en el código son creados y colocados en las posiciones indicadas.
-
Movilidad:
- Cada widget puede moverse dentro de la ventana utilizando el mouse.
- El método
make_widget_movable
habilita eventos de arrastre (<Button-1>
y<B1-Motion>
).
-
Selección:
- Los widgets pueden seleccionarse con clic derecho.
-
make_widget_selectable
habilita funcionalidades como:- Mostrar propiedades en la barra lateral.
- Copiar (
Control+C
) y pegar (Control+V
).
-
Guías visuales:
- Al mover un widget, se dibujan guías para facilitar su alineación con otros widgets.
- Las guías son creadas por
draw_guides
y eliminadas porclear_guides
.
-
Exportación:
- Los widgets creados pueden exportarse como código Python para ser reutilizados.
- La exportación es manejada por
export_to_file
.
A continuación, un ejemplo para agregar y personalizar un widget:
# Crear un botón en el centro de la VirtualWindow
virtual_window.add_widget("CTkButton", text="Click Me", fg_color="blue")
# Hacer que el botón sea movible y seleccionable
virtual_window.make_widget_movable(button)
virtual_window.make_widget_selectable(button)
# Exportar la configuración a un archivo
virtual_window.export_to_file("interfaz.py")