Widgets QMenuBar, QMenu y QAction

Una horizontal QMenuBar justo debajo de la barra de título de un objeto QMainWindow está reservado para mostrar objetos QMenu.

QMenuLa clase proporciona un widget que se puede agregar a la barra de menú. También se utiliza para crear un menú contextual y un menú emergente. Cada objeto QMenu puede contener uno o másQAction objetos u objetos QMenu en cascada.

Para crear un menú emergente, la API de PyQt proporciona la función createPopupMenu (). La función menuBar () devuelve el objeto QMenuBar de la ventana principal. La función addMenu () permite agregar un menú a la barra. A su vez, las acciones se agregan en el menú mediante el método addAction ().

La siguiente tabla enumera algunos de los métodos importantes utilizados en el diseño de un sistema de menús.

A continuación se muestran los métodos de QMenu más utilizados.

No Señor. Métodos y descripción
1

menuBar()

Devuelve el objeto QMenuBar de la ventana principal

2

addMenu()

Agrega un nuevo objeto QMenu a la barra de menú

3

addAction()

Agrega un botón de acción al widget QMenu que consta de texto o icono

4

setEnabled()

Establece el botón de estado de acción en habilitado / deshabilitado

5

addSeperator()

Agrega una línea de separación en el menú

6

Clear()

Elimina el contenido del menú / barra de menú

7

setShortcut()

Asocia el atajo de teclado al botón de acción

8

setText()

Asigna texto al botón de acción

9

setTitle()

Establece el título del widget QMenu

10

text()

Recupera el texto asociado con el objeto QAction.

11

title()

Recupera el texto asociado con el objeto QMenu.

El objeto QMenu emite una señal disparada () cada vez que se hace clic en cualquier botón de QAction. La referencia al objeto QAction en el que se hizo clic se pasa a la función de ranura conectada.

Ejemplo

En este ejemplo, primero se almacenan todas las referencias al objeto QMenuBar de la ventana de nivel superior (que tiene que ser un objeto QMainWindow).

bar = self.menuBar()

El menú Archivo se agrega a la barra de menú mediante el método addMenu ().

file = bar.addMenu("File")

Un botón de acción en el menú puede ser una cadena o un objeto QAction.

file.addAction("New")
save = QAction("Save",self)
save.setShortcut("Ctrl+S")
file.addAction(save)

Se agrega un submenú al menú de nivel superior.

edit = file.addMenu("Edit")
edit.addAction("copy")
edit.addAction("paste")

La señal triggered () emitida por el menú de archivo está conectada al método processtrigger (), que recibe el objeto QAction que causa la señal.

file.triggered[QAction].connect(self.processtrigger)

El código completo es el siguiente:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class menudemo(QMainWindow):
   def __init__(self, parent = None):
      super(menudemo, self).__init__(parent)
		
      layout = QHBoxLayout()
      bar = self.menuBar()
      file = bar.addMenu("File")
      file.addAction("New")
		
      save = QAction("Save",self)
      save.setShortcut("Ctrl+S")
      file.addAction(save)
		
      edit = file.addMenu("Edit")
      edit.addAction("copy")
      edit.addAction("paste")
		
      quit = QAction("Quit",self) 
      file.addAction(quit)
      file.triggered[QAction].connect(self.processtrigger)
      self.setLayout(layout)
      self.setWindowTitle("menu demo")
		
   def processtrigger(self,q):
      print q.text()+" is triggered"
		
def main():
   app = QApplication(sys.argv)
   ex = menudemo()
   ex.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   main()

El código anterior produce la siguiente salida: