Módulo 9: Menús, Toolbars y Barra de Estado
Crea interfaces de aplicación completas con menús profesionales
Crea interfaces de aplicación completas con menús profesionales
---
Objetivos de Aprendizaje
Al finalizar este módulo serás capaz de:
- Crear y configurar un Main Window con todas sus partes
- Diseñar menús completos con items, separadores y submenús
- Crear Actions y reutilizarlas en menús y toolbars
- Configurar atajos de teclado para acciones
- Crear toolbars con iconos
- Usar Dock Widgets para paneles acoplables
- Configurar la Status Bar con información contextual
- Diferenciar Main Window de Dialog
---
9.1 Main Window — La Ventana Principal
Hasta ahora hemos usado Dialogs. Ahora vamos a usar Main Window, que es el tipo de ventana para aplicaciones completas con menú, toolbar y barra de estado.
🎨 ANALOGÍA DEL DISEÑO
>
Si un Dialog es como un póster (una sola pantalla), un Main Window es como una revista completa: tiene portada (menú), herramientas (toolbar), contenido principal (área central) y pie de página (barra de estado).
Partes de un Main Window
┌──────────────────────────────────────────────────────────┐
│ [MenuBar] Archivo Edición Ver Proyecto Ayuda │ ← Menu Bar
├──────────────────────────────────────────────────────────┤
│ [Toolbar] 📁 📂 💾 ✂️ 📋 🔍 ▶️ ⏸️ ⏹️ │ ← Toolbar
├──────────────┬───────────────────────────────────┬───────┤
│ [Dock] │ │ [Dock]│
│ Explorador │ │ Prop. │
│ de │ Área Central │ │
│ Proyectos │ (Tab Widget, etc.) │ │
│ │ │ │
│ │ │ │
├──────────────┴───────────────────────────────────┴───────┤
│ [StatusBar] Listo | Línea 1, Col 1 | UTF-8 │ ← Status Bar
└──────────────────────────────────────────────────────────┘
Componentes del Main Window
| Componente | Descripción | Cuándo usarlo |
|---|---|---|
| ------------ | ------------- | --------------- |
| **Menu Bar** | Barra de menús en la parte superior | Siempre en aplicaciones completas |
| **Toolbar** | Barra de herramientas con iconos | Para acciones frecuentes |
| **Central Widget** | El área principal de contenido | Siempre (obligatorio) |
| **Dock Widgets** | Paneles flotantes/acoplables | Para paneles laterales opcionales |
| **Status Bar** | Barra de estado en la parte inferior | Para mensajes contextuales |
---
9.2 Crear un Main Window
Paso 1: Crear el archivo
- Abre Qt Designer
- Selecciona "Main Window" en el diálogo "New Form"
- Haz clic en "Create"
Paso 2: Explorar la estructura
Verás un Main Window con:
- Una Menu Bar vacía con "Type Here"
- Una Toolbar vacía
- Un Central Widget vacío
- Una Status Bar vacía
---
9.3 Crear Menús
Qt Designer tiene un editor de menús visual integrado en el Main Window.
Cómo crear un menú
- Haz clic en el texto "Type Here" en la Menu Bar
- Escribe el nombre del menú (ej: "Archivo")
- Presiona Enter
- Debajo del nombre del menú, haz clic en "Type Here" para agregar items
- Escribe el texto del item (ej: "Nuevo")
- Presiona Enter para crear el siguiente item
Estructura típica de un menú
Archivo
├── Nuevo
├── Abrir
├── Abrir reciente
│ ├── documento1.txt
│ ├── documento2.txt
│ └── documento3.txt
├── ───────────── (separador)
├── Guardar
├── Guardar como...
├── ───────────── (separador)
└── Salir
Cómo crear un separador
Escribe solo un guión - como texto del item. Qt Designer lo convertirá automáticamente en una línea separadora.
Cómo crear submenús
- Selecciona un item del menú
- Haz clic en el "Type Here" que aparece a la derecha del item
- Escribe el nombre del subitem
Propiedades de los items de menú
| Propiedad | Descripción | Ejemplo |
|---|---|---|
| ----------- | ------------- | --------- |
| **text** | Texto visible | `&Archivo` (Alt+A) |
| **shortcut** | Atajo de teclado | `Ctrl+N`, `Ctrl+S`, `F1` |
| **icon** | Icono junto al texto | `:/iconos/nuevo.png` |
| **toolTip** | Descripción emergente | "Crear un nuevo documento" |
| **statusTip** | Texto en la Status Bar | "Crear un nuevo documento" |
| **checkable** | Si se puede marcar/desmarcar | `true` para "Mostrar línea de cuadrícula" |
| **checked** | Si está marcado inicialmente | `true` / `false` |
| **enabled** | Si está activo o gris | `false` para items deshabilitados |
| **visible** | Si se muestra o no | `false` para ocultar |
Atajos de teclado con ampersand (&)
Usa & antes de una letra para crear un atajo de teclado Alt+letra:
| Texto | Atajo | Descripción |
|---|---|---|
| ------- | ------- | ------------- |
| `&Archivo` | Alt+A | Abre el menú Archivo |
| `&Editar` | Alt+E | Abre el menú Editar |
| `&Guardar` | Alt+G | Ejecuta la acción Guardar |
| `Ay&uda` | Alt+U | Abre el menú Ayuda |
Atajos de teclado estándar
| Atajo | Acción | Cuándo usarlo |
|---|---|---|
| ------- | -------- | --------------- |
| `Ctrl+N` | Nuevo | Crear archivo nuevo |
| `Ctrl+O` | Abrir | Abrir archivo existente |
| `Ctrl+S` | Guardar | Guardar cambios |
| `Ctrl+Shift+S` | Guardar como... | Guardar con otro nombre |
| `Ctrl+W` | Cerrar | Cerrar documento actual |
| `Ctrl+Q` | Salir | Salir de la aplicación |
| `Ctrl+Z` | Deshacer | Deshacer última acción |
| `Ctrl+Y` / `Ctrl+Shift+Z` | Rehacer | Rehacer acción deshecha |
| `Ctrl+X` | Cortar | Cortar selección |
| `Ctrl+C` | Copiar | Copiar selección |
| `Ctrl+V` | Pegar | Pegar desde portapapeles |
| `Ctrl+A` | Seleccionar todo | Seleccionar todo el contenido |
| `Ctrl+F` | Buscar | Abrir búsqueda |
| `F1` | Ayuda | Abrir ayuda |
| `F5` | Actualizar | Recargar contenido |
| `F11` | Pantalla completa | Alternar pantalla completa |
---
9.4 Actions — Elementos Reutilizables
Las Actions son elementos reutilizables que puedes colocar en menús, toolbars y menús contextuales.
🎨 ANALOGÍA DEL DISEÑO
>
Las Actions son como los componentes en Figma: los defines una vez y los reutilizas en menús, toolbars y context menus. Si cambias la acción, se actualiza en todos los lugares donde se usa.
Cómo crear una Action
- Ve a Editar > Edit Actions (o haz clic en el panel "Action Editor" en la parte inferior)
- Haz clic en "New" (icono de +)
- Configura las propiedades de la acción:
| Propiedad | Descripción | Ejemplo |
|---|---|---|
| ----------- | ------------- | --------- |
| **objectName** | Nombre interno | `accion_nuevo` |
| **text** | Texto visible | `&Nuevo` |
| **icon** | Icono | `:/iconos/nuevo.png` |
| **shortcut** | Atajo de teclado | `Ctrl+N` |
| **toolTip** | Descripción emergente | "Crear un nuevo documento" |
| **statusTip** | Texto en la Status Bar | "Crear un nuevo documento" |
| **checkable** | Si se puede marcar | `false` |
| **enabled** | Si está activa | `true` |
| **visible** | Si se muestra | `true` |
Cómo agregar una Action a un menú
- Abre el Action Editor (parte inferior)
- Arrastra la acción desde el Action Editor hasta el menú deseado
- La acción aparecerá como un item del menú
Cómo agregar una Action a una Toolbar
- Abre el Action Editor
- Arrastra la acción desde el Action Editor hasta la Toolbar en el Main Window
- La acción aparecerá como un botón con icono en la toolbar
Ventajas de usar Actions
| Ventaja | Descripción |
|---|---|
| --------- | ------------- |
| **Reutilización** | Una acción puede estar en el menú Y en la toolbar |
| **Consistencia** | Mismo texto, icono, atajo en todos los lugares |
| **Mantenimiento** | Cambias la acción una vez y se actualiza everywhere |
| **Estado centralizado** | Si desactivas la acción, se desactiva en todos los lugares |
---
9.5 Toolbars — Barras de Herramientas
Las toolbars son barras con iconos de acceso rápido. Piensa en la barra de herramientas de Photoshop.
Cómo configurar una Toolbar
- Haz clic derecho en la Toolbar vacía
- Selecciona la toolbar que quieres configurar (por defecto hay una llamada "toolBar")
- Arrastra Actions desde el Action Editor hasta la Toolbar
Propiedades de la Toolbar
| Propiedad | Descripción | Valores |
|---|---|---|
| ----------- | ------------- | --------- |
| **windowTitle** | Nombre de la toolbar | "Barra principal" |
| **iconSize** | Tamaño de los iconos | `24, 24`, `32, 32` |
| **toolButtonStyle** | Cómo mostrar icono y texto | `IconOnly`, `TextBesideIcon`, `TextUnderIcon` |
| **movable** | Si se puede mover | `true` / `false` |
| **floatable** | Si se puede hacer flotante | `true` / `false` |
| **allowedAreas** | Dónde se puede acoplar | `TopToolBarArea`, `BottomToolBarArea`, `AllToolBarAreas` |
Múltiples Toolbars
Puedes tener varias toolbars:
- Haz clic derecho en una toolbar existente
- Selecciona "Add Toolbar"
- Arrastra Actions a la nueva toolbar
Ejemplo de organización:
- Toolbar "Archivo": Nuevo, Abrir, Guardar
- Toolbar "Edición": Deshacer, Rehacer, Cortar, Copiar, Pegar
- Toolbar "Vista": Zoom in, Zoom out, Ajustar
---
9.6 Status Bar — Barra de Estado
La barra de estado en la parte inferior muestra información contextual.
Cómo agregar elementos a la Status Bar
- Selecciona la Status Bar en el Main Window
- Arrastra un Label desde el Widget Box hasta la Status Bar
- Configura el texto del Label
Usos típicos de la Status Bar
| Elemento | Descripción | Ejemplo |
|---|---|---|
| ---------- | ------------- | --------- |
| **Mensaje de estado** | Información sobre lo que está pasando | "Listo", "Guardando...", "Conectado" |
| **Posición del cursor** | En editores de texto | "Línea 15, Columna 32" |
| **Información del documento** | Datos del archivo actual | "UTF-8", "1200 palabras" |
| **Indicador de progreso** | Barra de progreso para operaciones largas | "Descargando... 45%" |
| **Zoom** | Nivel de zoom actual | "100%" |
---
9.7 Dock Widgets — Paneles Acoplables
Los Dock Widgets son paneles que el usuario puede mover, acoplar y hacer flotantes. Son exactamente como los paneles de Photoshop (Capas, Color, Propiedades).
Cómo agregar un Dock Widget
- Arrastra un Dock Widget desde el Widget Box al Main Window
- Qt Designer te mostrará dónde se puede acoplar (izquierda, derecha, arriba, abajo)
- Coloca widgets dentro del Dock Widget
Propiedades del Dock Widget
| Propiedad | Descripción | Valores |
|---|---|---|
| ----------- | ------------- | --------- |
| **windowTitle** | Título del panel | "Capas", "Propiedades" |
| **features** | Características del dock | `DockWidgetClosable`, `DockWidgetMovable`, `DockWidgetFloatable`, `AllDockWidgetFeatures`, `NoDockWidgetFeatures` |
| **allowedAreas** | Dónde se puede acoplar | `LeftDockWidgetArea`, `RightDockWidgetArea`, `TopDockWidgetArea`, `BottomDockWidgetArea`, `AllDockWidgetAreas` |
Ejemplo: Panel de Capas
┌─ Dock Widget: "Capas" ──────────────┐
│ [X] │ ← Botón de cerrar
├─────────────────────────────────────┤
│ [List Widget] │
│ ┌─────────────────────────────────┐│
│ │ 📁 Grupo 1 ││
│ │ 📄 Capa 1 ││
│ │ 📄 Capa 2 ││
│ │ 📄 Capa 3 ││
│ │ 📁 Grupo 2 ││
│ │ 📄 Capa 4 ││
│ └─────────────────────────────────┘│
│ │
│ [Botón +] [Botón -] [Botón 👁] │
└─────────────────────────────────────┘
Ejemplo: Panel de Propiedades
┌─ Dock Widget: "Propiedades" ────────┐
│ [X] │
├─────────────────────────────────────┤
│ [Form Layout] │
│ Posición X: [120] │
│ Posición Y: [85] │
│ Ancho: [200] │
│ Alto: [150] │
│ Rotación: [0°] │
│ Opacidad: [100%] ━━━●━━━ │
│ │
│ Color: [■] #41CD52 │
│ Borde: [2px sólido] │
│ Sombra: [☑] Activada │
└─────────────────────────────────────┘
---
9.8 Central Widget — El Área Principal
El Central Widget es el área principal de contenido del Main Window. Es obligatorio tener uno.
Qué colocar en el Central Widget
| Tipo de aplicación | Widget central recomendado |
|---|---|
| -------------------- | --------------------------- |
| Editor de texto | Text Edit o Plain Text Edit |
| Gestor de archivos | Table Widget o Tree Widget |
| Editor de imágenes | Graphics View o Frame |
| Aplicación con pestañas | Tab Widget |
| Aplicación con navegación | Stacked Widget |
| Dashboard | Grid Layout con múltiples widgets |
Cómo configurar el Central Widget
- Selecciona el centralwidget en el Object Inspector
- Aplica un layout (clic derecho > Lay Out > Lay Out Vertically)
- Arrastra widgets dentro del centralwidget
---
9.9 Menú Contextual (Context Menu)
Los menús contextuales aparecen al hacer clic derecho. En Qt Designer, los configuras a través de Actions.
Cómo configurar un menú contextual
- Crea las Actions que quieres en el menú contextual
- En el código Python, conecta el signal
customContextMenuRequesteddel widget a una función que muestre el menú
💡 CONSEJO: Los menús contextuales se configuran principalmente en código Python, pero las Actions que usas en ellos se crean en Qt Designer.
---
9.10 Estructura Completa de un Main Window
MainWindow
├── menuBar
│ ├── menuArchivo
│ │ ├── accionNuevo (Ctrl+N)
│ │ ├── accionAbrir (Ctrl+O)
│ │ ├── accionAbrirReciente
│ │ │ ├── accionDoc1
│ │ │ └── accionDoc2
│ │ ├── Separador
│ │ ├── accionGuardar (Ctrl+S)
│ │ ├── accionGuardarComo (Ctrl+Shift+S)
│ │ ├── Separador
│ │ └── accionSalir (Ctrl+Q)
│ ├── menuEdicion
│ │ ├── accionDeshacer (Ctrl+Z)
│ │ ├── accionRehacer (Ctrl+Y)
│ │ ├── Separador
│ │ ├── accionCortar (Ctrl+X)
│ │ ├── accionCopiar (Ctrl+C)
│ │ ├── accionPegar (Ctrl+V)
│ │ ├── Separador
│ │ └── accionSeleccionarTodo (Ctrl+A)
│ ├── menuVer
│ │ ├── accionZoomIn (Ctrl++)
│ │ ├── accionZoomOut (Ctrl+-)
│ │ ├── accionAjustar (Ctrl+0)
│ │ ├── Separador
│ │ └── accionPantallaCompleta (F11)
│ └── menuAyuda
│ ├── accionDocumentacion (F1)
│ ├── Separador
│ └── accionAcercaDe
├── toolBar
│ ├── accionNuevo
│ ├── accionAbrir
│ ├── accionGuardar
│ ├── Separador
│ ├── accionDeshacer
│ ├── accionRehacer
│ ├── Separador
│ └── accionZoomIn
├── dockWidgetIzquierdo ("Explorador")
│ └── Tree Widget
├── dockWidgetDerecho ("Propiedades")
│ └── Form Layout con campos
├── centralwidget
│ └── Tab Widget
│ ├── Pestaña "Diseño"
│ ├── Pestaña "Recursos"
│ └── Pestaña "Calendario"
└── statusBar
├── Label "Listo"
├── Label "UTF-8"
└── Label "100%"
---
Ejercicio Práctico del Módulo
🏋️ EJERCICIO 9: Interfaz de Aplicación de Diseño
>
Objetivo: Crear la interfaz principal completa de una aplicación de diseño.
>
Pasos:
1. Crea un Main Window
2. Cambia el
windowTitlea "MiApp de Diseño"3. Crea los siguientes menús:
- Archivo: Nuevo (Ctrl+N), Abrir (Ctrl+O), Guardar (Ctrl+S), Separador, Salir (Ctrl+Q)
- Edición: Deshacer (Ctrl+Z), Rehacer (Ctrl+Y), Separador, Cortar (Ctrl+X), Copiar (Ctrl+C), Pegar (Ctrl+V)
- Ver: Zoom In (Ctrl++), Zoom Out (Ctrl+-), Separador, Pantalla Completa (F11)
- Ayuda: Documentación (F1), Acerca de
4. Para cada item, configura:
- icon: Selecciona un icono apropiado (descarga iconos SVG gratuitos)
- toolTip: Descripción breve
- statusTip: Texto para la Status Bar
5. Crea Actions para cada item del menú
6. Agrega las Actions a la Toolbar (al menos: Nuevo, Abrir, Guardar, Deshacer, Rehacer)
7. Configura la Toolbar: iconSize
24, 24, toolButtonStyleIconOnly8. Agrega un Dock Widget llamado "Explorador" a la izquierda:
- Dentro: un Tree Widget con carpetas y archivos de ejemplo
- allowedAreas: LeftDockWidgetArea
9. Agrega un Dock Widget llamado "Propiedades" a la derecha:
- Dentro: un Form Layout con campos de posición, tamaño, color
- allowedAreas: RightDockWidgetArea
10. Configura el Central Widget:
- Aplica un Layout Vertical
- Agrega un Tab Widget con 3 pestañas: "Diseño", "Recursos", "Calendario"
- En "Diseño": un Frame grande como área de trabajo
- En "Recursos": un List Widget en modo IconMode
- En "Calendario": un Calendar Widget
11. Configura la Status Bar con Labels:
- "Listo"
- "UTF-8"
- "100%"
12. Aplica un tema oscuro con Style Sheets al Main Window
13. Renombra todos los widgets y actions
14. Guarda como
app_diseno.ui15. Presiona
Ctrl+Ry explora la interfaz
>
Resultado esperado: Una aplicación completa con menús funcionales, toolbar con iconos, paneles laterales acoplables, área central con pestañas y barra de estado.
---
Recursos Adicionales
| Recurso | Descripción |
|---|---|
| --------- | ------------- |
| [QMainWindow Documentation](https://doc.qt.io/qt-6/qmainwindow.html) | Documentación oficial de Main Window |
| [QMenuBar Documentation](https://doc.qt.io/qt-6/qmenubar.html) | Documentación de Menu Bar |
| [QToolBar Documentation](https://doc.qt.io/qt-6/qtoolbar.html) | Documentación de Toolbars |
| [QDockWidget Documentation](https://doc.qt.io/qt-6/qdockwidget.html) | Documentación de Dock Widgets |
---
Evaluación de Comprensión
- ¿Cuál es la diferencia principal entre un Dialog y un Main Window?
- ¿Qué son las Actions y por qué son útiles?
- ¿Cómo creas un separador en un menú?
- ¿Qué atajo de teclado se usa comúnmente para "Guardar"?
- ¿Cómo agregas un icono a un item de menú?
- ¿Qué propiedad del Dock Widget controla si se puede cerrar?
- ¿Qué widget es obligatorio en un Main Window?
- ¿Cómo agregas información a la Status Bar?
- ¿Qué significa el
&en el texto de un menú (&Archivo)? - ¿Puedes tener múltiples toolbars en un Main Window?
---
Módulo anterior: ← [Módulo 8: Iconos y Recursos](07-iconos-recursos.md)
Siguiente módulo: → [Módulo 10: Diálogos](09-dialogos.md)
Escribe tus respuestas y luego presiona el botón para comparar con las respuestas correctas.
Ejercicio 9: Interfaz de Aplicación de Diseño
Módulo 9: Menús y Toolbars
---
Objetivo
Crear la interfaz principal completa de una aplicación de diseño con menús, toolbars, docks y status bar.
---
Instrucciones
- Crea un Main Window
windowTitle: "MiApp de Diseño"
Menús:
- Archivo: Nuevo (Ctrl+N), Abrir (Ctrl+O), Guardar (Ctrl+S), Separador, Salir (Ctrl+Q)
- Edición: Deshacer (Ctrl+Z), Rehacer (Ctrl+Y), Separador, Cortar (Ctrl+X), Copiar (Ctrl+C), Pegar (Ctrl+V)
- Ver: Zoom In (Ctrl++), Zoom Out (Ctrl+-), Separador, Pantalla Completa (F11)
- Ayuda: Documentación (F1), Acerca de
Toolbar:
- Crea Actions para cada item del menú con iconos SVG
- Agrega las Actions a la Toolbar (al menos: Nuevo, Abrir, Guardar, Deshacer, Rehacer)
- iconSize:
24, 24, toolButtonStyle:IconOnly
Dock Widgets:
- "Explorador" a la izquierda: Tree Widget con carpetas y archivos de ejemplo
- "Propiedades" a la derecha: Form Layout con campos de posición, tamaño, color
Central Widget:
- Layout Vertical
- Tab Widget con 3 pestañas: "Diseño", "Recursos", "Calendario"
- "Diseño": Frame grande como área de trabajo
- "Recursos": List Widget en modo IconMode
- "Calendario": Calendar Widget
Status Bar:
- Labels: "Listo", "UTF-8", "100%"
- Aplica un tema oscuro con Style Sheets
- Renombra todos los widgets y actions
- Guarda como
app_diseno.ui - Presiona
Ctrl+Ry explora
---
Resultado Esperado
Una aplicación completa con menús funcionales, toolbar con iconos, paneles laterales acoplables, área central con pestañas y barra de estado.
---
Checklist
- [ ] 4 menús con items y atajos
- [ ] Actions creadas para cada item
- [ ] Toolbar con al menos 5 iconos
- [ ] Dock Widget izquierdo con Tree Widget
- [ ] Dock Widget derecho con Form Layout
- [ ] Tab Widget con 3 pestañas
- [ ] Status Bar con 3 labels
- [ ] Tema oscuro aplicado
- [ ] Todos los widgets y actions renombrados