Tutorial de PyQt5 - MenuBar
- Ejemplo básico de Menubar PyQt5
- Iconos de la entrada de menú de PyQt5
- Elemento de menú verificable PyQt5 Menubar
Normalmente hay una barra de menú en la esquina superior izquierda de la interfaz gráfica y bajo la barra de título. Si el usuario hace clic en el elemento del menú, puede tomar acciones como abrir archivos, guardar archivos o salir de la aplicación.
Aprenderemos cómo iniciar una barra de menú, vincular la acción al menú, añadir los accesos directos y mostrar el texto de estado.
Ejemplo básico de Menubar PyQt5
Crearemos nuestro primer ejemplo de menú PyQt5 que tiene un menú File
como en la mayoría de los editores. Sólo incluimos el sub-menú Exit
para simplificar.
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
class basicMenubar(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.initUI()
def initUI(self):
self.setGeometry(200, 200, 200, 200)
exitAction = QAction("&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("PyQt5 Basic Menubar")
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = basicMenubar()
sys.exit(app.exec_())
menubar = self.menuBar()
QMainWindow tiene el método menuBar()
para crear la barra de menú.
fileMenu = menubar.addMenu("&File")
fileMenu.addAction(exitAction)
Se añade fileMenu
a la barra de menús con el nombre File
, y consiste en una entrada de menú que se asocia con el objeto QAction
- exitAction
.
exitAction = QAction("&Exit", self)
exitAction.setShortcut("Ctrl+Q")
exitAction.setStatusTip("Exit application")
exitAction.triggered.connect(qApp.quit)
Crea el objeto QAction
para salir de la aplicación y guarda este objeto en la variable exitAction
.
Este objeto QAction
tiene el nombre de &Exit
y está asociado al atajo CTRL+Q.
exitAction.setStatusTip("Exit application")
Muestra el mensaje extra en la barra de estado self.statusBar
cuando el usuario pasa el puntero del ratón sobre esta entrada del menú.
exitAction.triggered.connect(qApp.quit)
Conectamos el evento que esta acción de salida se dispara al slot de salida de la aplicación.
Iconos de la entrada de menú de PyQt5
Tenemos dos métodos para establecer el icono del elemento de menú en la barra de menú de PyQt5.
Mapa de píxeles estándar en el estilo por defecto de PyQt5
Podríamos establecer el icono de la opción de menú con los iconos estándar utilizando el pixmap estándar en el estilo por defecto.
self.style().standardIcon(QStyle.SP_DialogCancelButton)
El código anterior selecciona el icono estándar de la cancelación de diálogos.
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QStyle
class basicMenubar(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.initUI()
def initUI(self):
self.setGeometry(200, 200, 200, 200)
exitAction = QAction(
self.style().standardIcon(QStyle.SP_DialogCancelButton), "&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("PyQt5 Basic Menubar")
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = basicMenubar()
sys.exit(app.exec_())
Usar el archivo de imagen con QIcon
Además del método anterior de utilizar los iconos por defecto de QStyle
, también podríamos utilizar cualquier archivo de imagen como icono utilizando la clase QIcon
.
QIcon("exit.png")
Establece el archivo de imagen exit.png
como el icono. El archivo exit.png
debe estar en la misma carpeta que el archivo de script python.
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QStyle
from PyQt5.QtGui import QIcon
class basicMenubar(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.initUI()
def initUI(self):
self.setGeometry(200, 200, 200, 200)
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("PyQt5 Basic Menubar")
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = basicMenubar()
sys.exit(app.exec_())
Elemento de menú verificable PyQt5 Menubar
El elemento de menú seleccionable puede ser marcado o desmarcado y el estado se conmuta cada vez que el usuario hace clic en él.
Necesitamos establecer el argumento de palabra clave checkable
como True
para hacer que el elemento del menú sea comprobable cuando creamos el objeto QAction
.
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt
class basicMenubar(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(200, 200, 200, 200)
self.label = QLabel("The toggle state is ")
self.label.setAlignment(Qt.AlignCenter)
self.setCentralWidget(self.label)
toggleAction = QAction("&Toggle Label", self, checkable=True)
toggleAction.setStatusTip("Toggle the label")
toggleAction.triggered.connect(self.toggleLabel)
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(toggleAction)
fileMenu.addAction(exitAction)
self.setWindowTitle("PyQt5 Basic Menubar")
self.show()
def toggleLabel(self, state):
self.label.setText("The toggle state is {}".format(state))
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = basicMenubar()
sys.exit(app.exec_())
toggleAction = QAction("&Toggle Label", self, checkable=True)
La propiedad checkable
debe establecerse como True
para que el elemento del menú sea comprobable cuando iniciemos el objeto QAction
.
O podríamos usar el método setCheckable()
después de que el objeto sea creado.
self.setCheckable(True)
El estado del elemento comprobable es el parámetro de la función de devolución de llamada. Por lo tanto, debemos listarlo en el argumento al definir la función. Como
def toggleLabel(self, state):
El state
es de tipo booleano, con el valor True
cuando está seleccionado y False
cuando no está seleccionado.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook