# PyQt/QPopupMenu
## Description

La classe QPopupMenu met à disposition un menu déroulant. Un tel menu peut être ajouté soit à un bouton (QPushButton), soit à une barre de menu (QMenuBar), soit être un menu de contexte affiché lorsque l'utilisateur clique avec le bouton droit de la souris dans une zone définie. Il est possible d'ajouter facilement des éléments à un menu par l'appel de la méthode insertItem, qui permet d'ajouter un texte, une image, ou n'importe quel élément mettant à disposition des méthodes d'affichage (voir la classe QCustomMenuItem pour cela). De plus, tous ces éléments peuvent avoir une icône et une touche accélératrice.
Il est aussi possible d'ajouter des séparateurs (insertSeparator)) ou bien des sous-menus en passant à insertItem un objet définissant lui même un menu déroulant. Cette classe offre de multiples possibilités. Il est possible d'ajouter des éléments cochables dans un menu (la méthode setCheckable sur un élément du menu), mais un menu peut aussi contenir un widget entier, comme par exemple un sélecteur de couleur. Une autre fonctionnalité intéressante est la possibilité de déclarer le menu comme tear-off, à savoir qu'il est possible de détacher le menu de son emplacement de départ pour le déplacer à un autre endroit à l'écran et le laisser ouvert tout le temps pour accéder rapidement à ses fonctions. Toutes ces fonctionnalités sont là pour fournir un maximum de flexibilité. Pour en savoir plus, consultez la page de référence à l'adresse http://doc.trolltech.com/3.3/qpopupmenu.html.

## Exemple

* PyQt3.*
* #!/usr/bin/python
* # -*- coding : utf-8 -*-
* # qpopupmenu.py
* # Programme exemple pour la classe QPopupMenu
* from qt import *
* import sys
* class Demo(QApplication) :
* def init (self, args) :
* QApplication. init (self,args)
* # widget principal, il s'agit d'une fenêtre de dialogue
* self.dialog = QDialog(None, "Dialog")
* #Barre de menu
* self.bar=QMenuBar(self.dialog, "Menubar")
* #définition d'un premier menu
* self.menu1 = QPopupMenu(None, "menu1")
* self.menu1.insertItem("&Menu 1")
* self.menu1.insertItem("M&enu 2")
* self.menu1.insertSeparator
* ret = self.menu1.insertItem("Me&nu 3")
* self.menu1.setItemEnabled(ret, False)
* #définition d'un second menu avec sous menu
* self.menu2 = QPopupMenu(None, "menu2")
* self.menu2.insertTearOffHandle
* self.menu2.insertItem("Menu 1")
* self.menu2.insertItem("Sous menu", self.menu1 )
* #Il est possible d'ajouter n'importe quel widget au menu !
* self.menu2.insertItem(QCheckBox("checkbox 1", self.menu2, "check1"))
* #ajout des menus à la barre
* self.bar.insertItem("&Bar 1", self.menu1)
* self.bar.insertItem("B&ar 2", self.menu2)
* self.dialog.show
* self.connect(self,SIGNAL("lastWindowClosed"),self,SLOT("quit"))
* self.exec loop
* if name == "__main__" :
* app=Demo(sys.argv)
* PyQt4.*
* #!/usr/bin/python
* # -*- coding : utf-8 -*-
* # qmenu.py
* # Programme exemple pour la classe QMenu
* from PyQt4.QtGui import *
* from PyQt4.QtCore import *
* import sys
* class Demo(QApplication) :
* def __init__(self, args) :
* QApplication.__init__(self,args)
* # widget principal, il s'agit d'une fenêtre de dialogue
* self.dialog = QDialog
* self.dialog.setWindowTitle("Dialog")
* #Barre de menu
* self.bar=QMenuBar
* #définition d'un premier menu
* self.menu1 = QMenu("menu1")
* self.menu1.addMenu("&Menu 1")
* self.menu1.addMenu("M&enu 2")
* ret = self.menu1.addMenu("Me&nu 3")
* self.vbox = QVBoxLayout
* self.vbox.addWidget(self.menu1)
* self.vbox.addStretch(1)
* self.dialog.setLayout(self.vbox)
* self.dialog.show
* self.connect(self,SIGNAL("lastWindowClosed"),self,SLOT("quit"))
* self.exec_
* if __name__ == "__main__" :
* app=Demo(sys.argv)