PyQT-5 Tutorial Menú

La clase QMainWindow representa una ventana, en ella podemos colocar toolbar (barra de herramientas), statusbar (barra de estado) y menubar (barra de menú). Este tutorial lo centraremos en la creación y uso de los menús.

PyQt5 Uso de menu y statusbar

En la parte superior de la ventana se ubica el menú principal de la aplicación, de momento solo cuenta con una opción, esta puede ser ejecutada al presionar con el ratón sobre ella o usando el atajo de teclado indicado (Ctrl+Q), en la parte inferior vemos la barra de estado, ella nos muestra información sobre la acción del menú seleccionado.

class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        exitAction = QAction(QIcon('exit.png'), '&Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(qApp.quit)

        self.statusBar()
        menubar = self.menuBar()

        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)

        self.setWindowTitle('Menubar And Statusbar')
        self.show()

La creación de una barra de estado y de una barra de menú es sencilla solo llamamos a los métodos self.statusBar() y self.menuBar() ambos nos devuelven un objeto que representa la barra de estado “QStatusBar” y el menú “QMenuBar” respectivamente.

Lo siguiente que debemos hacer es agregar elementos al menú, usaremos el método addMenu(‘&File’) del objeto QMenuBar debemos indicar el texto que se mostrará, este texto puede contener el símbolo & indicando así que la letra seguida de este será usada como atajo para acceder a este elemento del menú, en nuestro ejemplo la combinación de teclas Alt+F selecciona la opción File del menú.

statusbar = self.statusBar()
menubar = self.menuBar()

fileMenu = menubar.addMenu('&File')
editMenu = menubar.addMenu('Ed&it')
helpMenu = menubar.addMenu('&Help')

El siguiente paso es agregar acciones al menú usando la clase QAction, por ejemplo, la opción File por lo general contiene el siguiente conjunto de acciones: Abrir, Guardar, Salir, etc., cada una de ellas será representada por un objeto QAction.

exitAction = QAction(QIcon('exit.png'), '&Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit application')
exitAction.triggered.connect(qApp.quit)

Este es el QAction para la opción File / Exit en el constructor indicamos un icono, es opcional, seguido del texto, el método setShortcut establece el atajo de teclado, cuando presionemos la combinación de teclas establecidas se ejecutará la acción asociada, esta acción la establecemos con triggered.connect, otra cosa que hacemos es establecer el texto de ayuda que se muestra en la barra de estado mediante el método setStatusTip(‘texto a mostrar’).

Podemos crear una jerarquía de menús, agregando un menú dentro de otro, el método addMenu que vimos anteriormente nos devuelve un objeto QMenu, este posee también el método addMenu.

copyAction = QAction(QIcon('copy.png'), 'Copy', self)
pasteAction = QAction(QIcon('paste.png'), 'Paste', self)
cutAction = QAction(QIcon('cut.png'), 'Cut', self)

editMenu = menubar.addMenu('Ed&it')
editMenu.addAction(copyAction)
editMenu.addAction(pasteAction)
editMenu.addAction(cutAction)

findMenu = editMenu.addMenu('Find')
findAction = QAction('Find', self)
findAction.setShortcut('Ctrl+F')
findAction.setStatusTip('Buscar texto indicado')

replaceAction = QAction('Replace', self)
replaceAction.setShortcut('Ctrl+R')
replaceAction.setStatusTip('Reemplazar texto seleccionado')

findMenu.addAction(findAction)
findMenu.addAction(replaceAction)

Con este código logramos lo siguiente:

PyQt5 Creación de un menú

En este proyecto los iconos de los menús no están incluidos, si deseas incluirlos solo agregas los iconos al proyecto e indica el nombre y ruta correcta para cada una de ellas.

Proyecto en GitHub: PyQt-5 Uso de Menú

Comentarios

Temas relacionados

Entradas populares de este blog

tkinter Grid

tkinter Canvas

Controles y Contenedores JavaFX 8 - I

Conectar SQL Server con Java