Widgets QMenuBar, QMenu e QAction

Uma horizontal QMenuBar logo abaixo da barra de título de um objeto QMainWindow está reservado para exibir objetos QMenu.

QMenuclasse fornece um widget que pode ser adicionado à barra de menus. Também é usado para criar menu de contexto e menu pop-up. Cada objeto QMenu pode conter um ou maisQAction objetos ou objetos QMenu em cascata.

Para criar um menu pop-up, a API PyQt fornece a função createPopupMenu (). A função menuBar () retorna o objeto QMenuBar da janela principal. A função addMenu () permite adicionar menu à barra. Por sua vez, as ações são adicionadas no menu pelo método addAction ().

A tabela a seguir lista alguns dos métodos importantes usados ​​no projeto de um sistema de menu.

A seguir estão os métodos mais comumente usados ​​de QMenu.

Sr. Não. Métodos e Descrição
1

menuBar()

Retorna o objeto QMenuBar da janela principal

2

addMenu()

Adiciona um novo objeto QMenu à barra de menu

3

addAction()

Adiciona um botão de ação ao widget QMenu que consiste em texto ou ícone

4

setEnabled()

Define o estado do botão de ação para ativado / desativado

5

addSeperator()

Adiciona uma linha separadora no menu

6

Clear()

Remove o conteúdo do menu / barra de menu

7

setShortcut()

Associa o atalho do teclado ao botão de ação

8

setText()

Atribui texto ao botão de ação

9

setTitle()

Define o título do widget QMenu

10

text()

Recupera o texto associado ao objeto QAction

11

title()

Recupera o texto associado ao objeto QMenu

O objeto QMenu emite o sinal triggered () sempre que qualquer botão QAction for clicado. A referência ao objeto QAction clicado é passada para a função de slot conectada.

Exemplo

Neste exemplo, primeiro todas as referências ao objeto QMenuBar da janela de nível superior (que deve ser um objeto QMainWindow) são armazenadas.

bar = self.menuBar()

O menu Arquivo é adicionado à barra de menus pelo método addMenu ().

file = bar.addMenu("File")

Um botão de ação no menu pode ser uma string ou um objeto QAction.

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

Um submenu é adicionado ao menu de nível superior.

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

O sinal triggered () emitido pelo menu de arquivo é conectado ao método processtrigger (), que recebe o objeto QAction que está causando o sinal.

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

O código completo é o seguinte -

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

O código acima produz a seguinte saída -