Este tutorial fornece um guia completo para criar e personalizar barras de menu em PyQt5. Abordaremos vários exemplos, progredindo de uma implementação básica para recursos mais avançados, incluindo a adição de ícones e itens de menu selecionáveis. Ao final, você poderá criar menus robustos e amigáveis para seus aplicativos PyQt5.
Sumário:
- Criando uma Barra de Menu Básica
- Adicionando Ícones aos Itens de Menu
- Implementando Itens de Menu Selecionáveis
- Criando Submenus
- Adicionando Atalhos de Teclado
- Menus de Contexto
1. Criando uma Barra de Menu Básica
Esta seção demonstra o processo fundamental de adicionar uma barra de menu ao seu aplicativo PyQt5 e preenchê-la com menus e ações. Este exemplo cria um menu “Arquivo” simples com as opções “Novo”, “Abrir” e “Sair”.
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QAction
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Exemplo de Barra de Menu PyQt5")
menubar = self.menuBar()
file_menu = menubar.addMenu("Arquivo")
new_action = QAction("Novo", self)
open_action = QAction("Abrir", self)
exit_action = QAction("Sair", self)
file_menu.addAction(new_action)
file_menu.addAction(open_action)
file_menu.addSeparator()
file_menu.addAction(exit_action)
exit_action.triggered.connect(QApplication.instance().quit)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
2. Adicionando Ícones aos Itens de Menu
Adicionar ícones melhora a experiência do usuário. Esta seção mostra como incorporar ícones aos seus itens de menu.
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QAction
from PyQt5.QtGui import QIcon
# ... (classe MainWindow do exemplo anterior) ...
new_action.setIcon(QIcon("new.png")) # Substitua pelo caminho do seu ícone
open_action.setIcon(QIcon("open.png")) # Substitua pelo caminho do seu ícone
exit_action.setIcon(QIcon("exit.png")) # Substitua pelo caminho do seu ícone
# ... (resto do código do exemplo anterior) ...
Lembre-se de substituir `”new.png”`, `”open.png”` e `”exit.png”` pelos caminhos reais para seus arquivos de ícone. Certifique-se de que os ícones estejam no mesmo diretório que seu script Python ou forneça o caminho completo.
3. Implementando Itens de Menu Selecionáveis
Itens de menu selecionáveis permitem que os usuários alternem as opções entre ativadas e desativadas. Este exemplo demonstra sua criação e gerenciamento.
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QAction
# ... (classe MainWindow do exemplo anterior) ...
toolbar_action = QAction("Mostrar Barra de Ferramentas", self, checkable=True)
toolbar_action.setChecked(True)
file_menu.addAction(toolbar_action)
toolbar_action.triggered.connect(self.toggle_toolbar)
def toggle_toolbar(self, checked):
print(f"Visibilidade da barra de ferramentas: {checked}") # Substitua pela sua lógica da barra de ferramentas
# ... (resto do código do exemplo anterior) ...
4. Criando Submenus
Organize seus itens de menu logicamente com submenus.
# ... (dentro de __init__ da MainWindow) ...
edit_menu = menubar.addMenu("Editar")
undo_action = QAction("Desfazer", self)
redo_action = QAction("Refazer", self)
edit_menu.addAction(undo_action)
edit_menu.addAction(redo_action)
# ...
5. Adicionando Atalhos de Teclado
Melhore a usabilidade com atalhos de teclado.
# ... (dentro de __init__ da MainWindow) ...
exit_action.setShortcut("Ctrl+Q")
# ...
6. Menus de Contexto
Implemente menus de clique com o botão direito.
# ... (dentro de __init__ da MainWindow) ...
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.show_context_menu)
def show_context_menu(self, pos):
menu = QMenu(self)
copy_action = QAction("Copiar", self)
paste_action = QAction("Colar", self)
menu.addAction(copy_action)
menu.addAction(paste_action)
menu.exec_(self.mapToGlobal(pos))
# ...
Este tutorial expandido fornece uma base mais completa para trabalhar com Barras de Menu em PyQt5. Lembre-se de instalar o PyQt5 usando pip install PyQt5
. Você pode expandir esses exemplos para criar menus ainda mais complexos e ricos em recursos para seus aplicativos.