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 -