QMenuBar, QMenu e QAction Widget
Un orizzontale QMenuBar appena sotto la barra del titolo di un oggetto QMainWindow è riservato per la visualizzazione di oggetti QMenu.
QMenuclass fornisce un widget che può essere aggiunto alla barra dei menu. Viene anche utilizzato per creare menu contestuali e menu popup. Ogni oggetto QMenu può contenerne uno o piùQAction oggetti o oggetti QMenu in cascata.
Per creare un menu a comparsa, l'API PyQt fornisce la funzione createPopupMenu (). La funzione menuBar () restituisce l'oggetto QMenuBar della finestra principale. La funzione addMenu () consente l'aggiunta di menu alla barra. A loro volta, le azioni vengono aggiunte nel menu dal metodo addAction ().
La tabella seguente elenca alcuni dei metodi importanti utilizzati nella progettazione di un sistema di menu.
Di seguito sono riportati i metodi più comunemente usati di QMenu.
Sr.No. | Metodi e descrizione |
---|---|
1 | menuBar() Restituisce l'oggetto QMenuBar della finestra principale |
2 | addMenu() Aggiunge un nuovo oggetto QMenu alla barra dei menu |
3 | addAction() Aggiunge un pulsante di azione al widget QMenu costituito da testo o icona |
4 | setEnabled() Imposta lo stato del pulsante di azione su abilitato / disabilitato |
5 | addSeperator() Aggiunge una linea di separazione nel menu |
6 | Clear() Rimuove il contenuto del menu / barra dei menu |
7 | setShortcut() Associa la scorciatoia da tastiera al pulsante di azione |
8 | setText() Assegna del testo al pulsante di azione |
9 | setTitle() Imposta il titolo del widget QMenu |
10 | text() Recupera il testo associato all'oggetto QAction |
11 | title() Recupera il testo associato all'oggetto QMenu |
L'oggetto QMenu emette un segnale triggered () ogni volta che si fa clic su un pulsante QAction. Il riferimento all'oggetto QAction cliccato viene passato alla funzione di slot connesso.
Esempio
In questo esempio, prima vengono memorizzati tutti i riferimenti all'oggetto QMenuBar della finestra di livello superiore (che deve essere un oggetto QMainWindow).
bar = self.menuBar()
Il menu File viene aggiunto alla barra dei menu con il metodo addMenu ().
file = bar.addMenu("File")
Un pulsante di azione nel menu può essere una stringa o un oggetto QAction.
file.addAction("New")
save = QAction("Save",self)
save.setShortcut("Ctrl+S")
file.addAction(save)
Un sottomenu viene aggiunto al menu di livello superiore.
edit = file.addMenu("Edit")
edit.addAction("copy")
edit.addAction("paste")
Il segnale triggered () emesso dal menu file è collegato al metodo processtrigger (), che riceve l'oggetto QAction che causa il segnale.
file.triggered[QAction].connect(self.processtrigger)
Il codice completo è il seguente:
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()
Il codice precedente produce il seguente output: