Widgets QMenuBar, QMenu et QAction

Une horizontale QMenuBar juste en dessous de la barre de titre d'un objet QMainWindow est réservé à l'affichage des objets QMenu.

QMenuclass fournit un widget qui peut être ajouté à la barre de menus. Il est également utilisé pour créer un menu contextuel et un menu contextuel. Chaque objet QMenu peut contenir un ou plusieursQAction objets ou objets QMenu en cascade.

Pour créer un menu contextuel, l'API PyQt fournit la fonction createPopupMenu (). La fonction menuBar () renvoie l'objet QMenuBar de la fenêtre principale. La fonction addMenu () permet d'ajouter un menu à la barre. À leur tour, les actions sont ajoutées dans le menu par la méthode addAction ().

Le tableau suivant répertorie certaines des méthodes importantes utilisées dans la conception d'un système de menus.

Vous trouverez ci-dessous les méthodes de QMenu les plus couramment utilisées.

N ° Sr. Méthodes et description
1

menuBar()

Renvoie l'objet QMenuBar de la fenêtre principale

2

addMenu()

Ajoute un nouvel objet QMenu à la barre de menus

3

addAction()

Ajoute un bouton d'action au widget QMenu composé de texte ou d'icône

4

setEnabled()

Définit l'état du bouton d'action sur activé / désactivé

5

addSeperator()

Ajoute une ligne de séparation dans le menu

6

Clear()

Supprime le contenu du menu / barre de menu

sept

setShortcut()

Associe le raccourci clavier au bouton d'action

8

setText()

Attribue du texte au bouton d'action

9

setTitle()

Définit le titre du widget QMenu

dix

text()

Récupère le texte associé à l'objet QAction

11

title()

Récupère le texte associé à l'objet QMenu

L'objet QMenu émet un signal déclenché () chaque fois qu'un bouton QAction est cliqué. La référence à l'objet QAction cliqué est transmise à la fonction de slot connecté.

Exemple

Dans cet exemple, toute référence à l'objet QMenuBar de la fenêtre de niveau supérieur (qui doit être un objet QMainWindow) est stockée.

bar = self.menuBar()

Le menu Fichier est ajouté à la barre de menus par la méthode addMenu ().

file = bar.addMenu("File")

Un bouton d'action dans le menu peut être une chaîne ou un objet QAction.

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

Un sous-menu est ajouté au menu de niveau supérieur.

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

Le signal triggered () émis par le menu fichier est connecté à la méthode processtrigger (), qui reçoit l'objet QAction à l'origine du signal.

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

Le code complet est le suivant -

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()

Le code ci-dessus produit la sortie suivante -