Bara de estado
La barra de estado muestra mensajes informativos al usuario. Se obtiene desde QMainWindow con statusBar() y se actualiza mediante showMessage.
from PyQt5.QtWidgets import QApplication, QMainWindow
class VentanaPrincipal(QMainWindow):
def __init__(self):
super().__init__()
self._configurar_ui()
def _configurar_ui(self):
self.statusBar().showMessage("Listo")
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle("Barra de estado")
self.show()
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
ventana = VentanaPrincipal()
sys.exit(app.exec_())
Barra de menú
Para agregar una barra de menús se usa menuBar(). En macOS el comportamiento nativo puede diferir, por lo que se puede forzar la presentación interna con setNativeMenuBar(False).
from PyQt5.QtWidgets import QMainWindow, QAction, qApp
class VentanaPrincipal(QMainWindow):
def __init__(self):
super().__init__()
self._configurar_ui()
def _configurar_ui(self):
salir = QAction("&Salir", self)
salir.setShortcut("Ctrl+Q")
salir.setStatusTip("Cerrar la aplicación")
salir.triggered.connect(qApp.quit)
self.statusBar()
barra = self.menuBar()
# barra.setNativeMenuBar(False) # descomentar en macOS
menu_archivo = barra.addMenu("&Archivo")
menu_archivo.addAction(salir)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle("Menú básico")
self.show()
Submenús
Los submenús se crean con QMenu y se anidan dentro de otro menú usando addMenu.
from PyQt5.QtWidgets import QMainWindow, QAction, QMenu
class VentanaPrincipal(QMainWindow):
def __init__(self):
super().__init__()
self._configurar_ui()
def _configurar_ui(self):
barra = self.menuBar()
menu_archivo = barra.addMenu("Archivo")
menu_importar = QMenu("Importar", self)
accion_correo = QAction("Importar correo", self)
menu_importar.addAction(accion_correo)
accion_nuevo = QAction("Nuevo", self)
menu_archivo.addAction(accion_nuevo)
menu_archivo.addMenu(menu_importar)
self.setGeometry(300, 300, 200, 150)
self.setWindowTitle("Submenú")
self.show()
Menú contextual
El menú contextual aparece al hacer clic derecho. Se implementa sborescribiendo contextMenuEvent en un QWidget.
from PyQt5.QtWidgets import QWidget, QAction, QMenu
class AreaEdicion(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self._crear_acciones()
def _crear_acciones(self):
self.accion_copiar = QAction("Copiar", self)
self.accion_copiar.triggered.connect(lambda: print("Copiar"))
self.accion_pegar = QAction("Pegar", self)
self.accion_pegar.triggered.connect(lambda: print("Pegar"))
def contextMenuEvent(self, evento):
menu = QMenu(self)
menu.addAction(self.accion_copiar)
menu.addAction(self.accion_pegar)
menu.exec_(evento.globalPos())