Capítulo 3
El Diseñador
Proyectos, componentes, inspector, eventos, código generado y ejecución.
Proyectos
La lista de proyectos muestra los del área de trabajo y los abiertos desde otras carpetas. Arriba se ve el Python encontrado (versión de Python y de Tk) y el botón para Volver a buscar Python.
Se ve como una lista con columnas (Nombre, Tipo, Componentes, Modificado y Carpeta) que se ordenan con un clic en su título, o en Tarjetas. Tiene Buscar proyectos y va por páginas (Por página: 10, 15, 25 o 50). Doble clic abre un proyecto. El botón derecho sobre un proyecto ofrece Abrir, Ejecutar, Mostrar la carpeta, GitHub…, Presupuesto de IA, Duplicar y Eliminar; sobre el fondo, Agregar nuevo › Proyecto de escritorio (Python), Proyecto web (Flask) o Abrir carpeta….
- Nuevo proyecto: pide el nombre y el destino, Escritorio (Python) o Web (Flask). El destino no se puede cambiar después.
- Abrir carpeta…: abre un proyecto que esté en cualquier otra carpeta; queda en la lista como reciente.
- Área de trabajo: Mostrar la abre en el Finder o el Explorador y Cambiar… elige otra carpeta.
- En cada tarjeta: Ejecutar, Mostrar la carpeta y, en Más acciones, GitHub…, Presupuesto de IA, Duplicar y Eliminar (lleva el proyecto a la papelera del área de trabajo).
- Pestañas: cada proyecto abierto tiene su pestaña arriba, con un punto si hay cambios sin guardar. Puede tener varios abiertos a la vez; la pestaña Proyectos vuelve a la lista sin cerrar nada. Se cierran con la ✕ o con clic central, y preguntan si guardar.
El estudio copia en el área de trabajo los proyectos de ejemplo (los nuevos aparecen también en áreas de trabajo ya creadas). Vea la lista completa en Ejemplos incluidos.
La pantalla del Diseñador
- Barra de herramientas: volver a los proyectos, nombre de la aplicación (clic para renombrarla), Guardar, Deshacer, Ejecutar (F9) en verde, Detener en rojo, Abrir en el navegador (web), Mostrar la carpeta del proyecto, Exportar el archivo .py, GitHub, Presupuesto de IA, Pedir a la IA, Chat con Claude Code, alineación y centrado, Ajustar a la rejilla y Ver la salida.
- Consola de salida: abajo; se agranda o se reduce arrastrando su borde superior, se minimiza con la flecha y Copiar la salida copia todos los mensajes.
- Paleta: una barra de iconos; al pasar el ratón sale el nombre del componente. Se arrastra al formulario o se añade con doble clic.
- Árbol: la ventana y sus componentes, con los que están dentro de un marco o de una página sangrados.
- Inspector: Propiedades y Eventos del componente seleccionado o, si no hay ninguno, de la ventana.
- Centro: pestañas Diseño, Código y Python generado. F12 pasa del diseño al código y vuelta.

Componentes
Todos los componentes tienen Nombre, posición y tamaño. Casi todos admiten Color de fondo, Color del texto y fuente (Fuente, Tamaño de fuente, Negrita, Cursiva), y los eventos de ratón (Clic, Doble clic, Clic derecho, Entrar el ratón, Salir el ratón). Los de escritura añaden los de teclado (Recibir el foco, Perder el foco, Tecla pulsada, Tecla soltada, Tecla Intro).
| Componente | Propiedades propias | Eventos principales |
|---|---|---|
Etiqueta (Label) | Texto, Alineación, Justificación, Relieve, Ajuste de línea | Ratón |
Botón (Button) | Texto, Estado, Relieve | Al pulsar (Button1_click) |
Campo de texto (Entry) | Texto inicial, Justificación, Ocultar con (p. ej. * para contraseñas), Estado, Tabla enlazada y Campo enlazado | Teclado y ratón |
Contraseña (Password) | Texto de ayuda, Botón para ver la contraseña, Longitud máxima, Estado | Teclado y ratón |
Imagen (Image) | Archivo (en la carpeta images del proyecto), Ajuste (tamaño original, entera sin deformar, rellenar recortando, estirar), Borde | Ratón |
Texto largo (Text) | Texto inicial (varias líneas), Ajuste de línea, Estado | Teclado y ratón |
Casilla (Checkbutton) | Texto, Estado, Marcada | Al pulsar |
Opción (Radiobutton) | Texto, Estado, Grupo, Valor, Marcada | Al pulsar |
Lista (Listbox) | Elementos (uno por línea), Selección (browse, single, multiple, extended) | Al seleccionar |
Lista desplegable (Combobox) | Elementos (uno por línea), Texto inicial, Justificación, Estado (normal, readonly, disabled) | Al seleccionar |
Deslizador (Scale) | Título, Desde, Hasta, Paso, Valor, Orientación, Mostrar el valor | Al cambiar (recibe el valor) |
Marco (Frame) | Relieve, Borde. Contiene otros componentes | Ratón |
Lienzo (Canvas) | Color de fondo. Para dibujar desde el código | Ratón, Arrastrar, Soltar el botón, Mover el ratón |
Tabla de datos (Treeview) | Fuente de datos, Consulta SQL, Columnas (campo|título|ancho), Límite, Orden, Cargar al abrir | Al seleccionar |
Barra de progreso (Progressbar) | Valor, Máximo, Modo (determinate o indeterminate), Orientación | Ratón |
Control de páginas (PageControl) | Páginas (una por línea), Página activa. Cada página contiene sus componentes | Al cambiar de página |
Barra de estado (StatusBar) | Texto. Ocupa siempre el borde inferior de la ventana | Ratón |
Cinta de opciones (Ribbon) | Pestañas, grupos y botones (con sangría; «Botón | icono»), Pestaña activa | Al pulsar un botón, Al cambiar de pestaña |
Menú (Menu) | Opciones (una por línea; sangría = submenú; - = separador). No visual: se ve arriba de la ventana | Al elegir una opción (recibe la opción) |
Temporizador (Timer) | Intervalo (ms), Activo. No visual | Cada intervalo |
Integración API (RestClient) | URL base, Autenticación (ninguna, token Bearer, básica o clave en una cabecera; el secreto, mejor en una variable de entorno), Cabeceras, Tiempo máximo. No visual | Al terminar una llamada, Si falla una llamada |
Icono de bandeja (TrayIcon) | Texto al pasar el ratón, Imagen, Menú (una opción por línea). No visual | Al hacer clic en el icono, Al elegir una opción del menú |
Diálogo Abrir (OpenDialog) | Título, Tipos («Texto|*.txt»), Extensión por defecto, Carpeta inicial, Elegir varios archivos. No visual | Al elegir un archivo |
Diálogo Guardar (SaveDialog) | Título, Tipos, Extensión por defecto, Carpeta inicial, Nombre del archivo, Preguntar antes de sobrescribir. No visual | Al elegir un archivo |
Asistente IA (AiAssistant) | Modelo de Claude, Instrucciones, Esfuerzo, Longitud máxima. No visual. Desde el código: ask, chat (con memoria; reset empieza otra), summarize, translate, classify (una etiqueta de una lista), extract (datos en un diccionario) y sus variantes *_async, que no congelan la ventana. Usa el SDK oficial de Anthropic (pip install anthropic); al ejecutar desde el estudio recibe la clave de Ajustes por la variable ANTHROPIC_API_KEY | Al llegar la respuesta, Si falla la petición |
Informe PDF (PdfReport) | Título del documento, Nombre del archivo, Orientación, Autor, Números de página. No visual. Desde el código: title, heading, text, table (con totales y cabecera repetida en cada página), image (JPEG), line, page_break; luego save, save_dialog, open o download (web). Sin bibliotecas que instalar | — |
Informe Excel (ExcelReport) | Nombre del archivo, Primera hoja. No visual. Desde el código: sheet, header, write_row, write_rows (texto, números, fechas y casillas con su tipo; cabecera fija con filtro); luego save, save_dialog, open o download (web) | — |
Gráfico (Chart) | Tipo (líneas, área, barras o velas), Título, Títulos de los ejes, Leyenda, Rejilla, Decimales, Prefijo y Sufijo de los valores, Puntos como máximo. Desde el código: set_series, add_point, set_candles, add_candle, clear | Al hacer clic en un punto |
Conexión de datos (Connection) | Conexión (una de las guardadas en Bases de datos). No visual | — |
Menú, Barra de progreso, Barra de estado, Temporizador y Control de páginas llegan con la versión 1.0.5; Contraseña, Imagen, Cinta de opciones, Integración API, Icono de bandeja y los diálogos Abrir y Guardar, con la 1.0.6; el Gráfico, con la 1.0.8. En una aplicación web, los componentes sin equivalente lo indican en el inspector.
Mover, alinear y editar
- Clic selecciona; arrastrar mueve; los tiradores cambian el tamaño. Con Ajustar a la rejilla activado todo encaja en la rejilla.
- Las flechas mueven la selección un paso de rejilla; con Alt (Opción), un píxel; con Mayús, cambian el tamaño.
- Con dos o más componentes seleccionados se activan Alinear a la izquierda, Centrar en horizontal, Alinear a la derecha, Alinear arriba, Centrar en vertical, Alinear abajo, Igualar el ancho e Igualar el alto (respecto al primero seleccionado).
- Con uno o más seleccionados, Centrar en la ventana (horizontal) y Centrar en la ventana (vertical) los centran como un bloque en la ventana o en su marco.
- El botón derecho ofrece Cortar, Copiar, Pegar, Eliminar, Traer al frente y Enviar al fondo.
- Copiar entre proyectos: lo copiado va al portapapeles del sistema, con sus hijos y el código de sus eventos. Se pega en otro proyecto (o tras reiniciar el estudio): los componentes toman nombres libres y sus métodos se renombran con ellos, sin pisar ninguno que ya exista. Los métodos auxiliares que llamen sus eventos se copian a mano.
- Deshacer (⌘Z / Ctrl+Z) vuelve atrás cada cambio del diseño. Si el código se cambió a mano después de un paso, ese paso restaura el diseño pero no el código, y se avisa.
Posición de la ventana
La propiedad Posición de la ventana decide dónde se abre: Centrada en la pantalla (la de los proyectos nuevos), Por defecto (la decide el sistema) o Manual, con Izquierda y Arriba.
Eventos y código
El código de la ventana es una clase de Python con el nombre del formulario que hereda de FormDesign, la clase que genera el estudio. self.root es la ventana y cada componente es self.<Nombre>.
- Doble clic en un componente abre su evento principal (
Button1_click,Listbox1_select…) y lo crea si no existe. - En la pestaña Eventos del inspector se escribe o se elige el método de cada evento; Ir al código salta a él.
- Renombrar un componente renombra sus métodos de serie y las referencias del código.
- La ventana tiene sus eventos: Al abrir (
form_create), Al cerrar, Tecla pulsada y Al cambiar de tamaño, y sus propiedades Título, Color de fondo, Redimensionable y Siempre encima.
class Form1(FormDesign):
def form_create(self):
self.total = 0
self.StatusBar1.config(text="Listo")
def Button1_click(self):
self.total += 1
self.Label1.config(text=f"Pulsado {self.total} veces")Ponga lo que deba ocurrir al arrancar en el evento Al abrir (form_create). Si define su propio __init__, llame primero a super().__init__().

Python generado y exportación
La pestaña Python generado muestra, solo para leer, el archivo completo que se ejecuta: el diseño convertido en código más su clase. Al ejecutar se escribe en build/<proyecto>.py, dentro de la carpeta del proyecto.
Exportar el archivo .py guarda ese archivo donde quiera. Funciona con cualquier Python 3 con tkinter (o con Flask, si es web) sin el estudio.

Ejecutar, detener y ver la salida
- Ejecutar (F9) guarda el proyecto y lanza la ventana en su propia ventana del sistema, con los permisos de su usuario.
- Detener cierra la ventana o el servidor en marcha.
- Ver la salida abre el panel con lo que la aplicación escribe (
print, errores de Python) y el Python usado. - En una aplicación web, el estudio arranca el servidor de Flask en este equipo y abre el navegador; Abrir en el navegador vuelve a abrirla. Solo se llega a ella desde este equipo.
Conexiones de datos
- Guarde la base de datos en el módulo Bases de datos (SQLite, PostgreSQL o MySQL/MariaDB).
- Añada una Conexión de datos al formulario y elija esa conexión en su propiedad Conexión.
- Añada una Tabla de datos, elija la conexión en Fuente de datos y escriba la Consulta SQL y las Columnas (
campo|título|ancho). - Para editar la fila elegida, enlace un Campo de texto con Tabla enlazada y Campo enlazado.
Desde el código, self.Connection1.query(sql, params) devuelve filas y self.Connection1.execute(sql, params) modifica datos (siempre con parámetros ?, nunca uniendo texto). self.Treeview1_refresh() vuelve a cargar la tabla.
Las contraseñas no se escriben en el archivo generado: llegan al proceso en variables de entorno DMSTUDIO_DB_…. Un archivo exportado las lee del entorno.