PyQt5 Tutorial - Barra de Menu
- PyQt5 Exemplo Básico da Barra de Menu
- Ícones do Item do Menu PyQt5 Menubar
- PyQt5 Menubar Item de menu verificável
Uma barra de menu está normalmente no canto superior esquerdo da GUI e sob a barra de título. Se o usuário clicar no item do menu, ele pode tomar ações como abrir arquivos, salvar arquivos ou sair da aplicação.
Vamos aprender como iniciar uma barra de menu, ligar a acção ao menu, adicionar os atalhos e mostrar o texto de estado.
PyQt5 Exemplo Básico da Barra de Menu
Vamos criar o nosso primeiro exemplo de menubar PyQt5 que tem o menu File
como na maioria dos editores. Incluímos apenas o sub-menu Exit
para simplificar.
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
class basicMenubar(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.initUI()
def initUI(self):
self.setGeometry(200, 200, 200, 200)
exitAction = QAction("&Exit", self)
exitAction.setShortcut("Ctrl+Q")
exitAction.setStatusTip("Exit application")
exitAction.triggered.connect(qApp.quit)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu("&File")
fileMenu.addAction(exitAction)
self.setWindowTitle("PyQt5 Basic Menubar")
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = basicMenubar()
sys.exit(app.exec_())
menubar = self.menuBar()
A QMainWindow
tem o método menuBar()
para criar a barra de menu.
fileMenu = menubar.addMenu("&File")
fileMenu.addAction(exitAction)
O fileMenu
é adicionado à barra de menu com o nome File
, e consiste em uma entrada de menu que associa o objeto QAction
- exitAction
.
exitAction = QAction("&Exit", self)
exitAction.setShortcut("Ctrl+Q")
exitAction.setStatusTip("Exit application")
exitAction.triggered.connect(qApp.quit)
Ele cria o objeto QAction
para sair da aplicação e salva este objeto na variável exitAction
.
Este objeto QAction
tem o nome de &Exit
e está associado ao atalho CTRL+Q.
exitAction.setStatusTip("Exit application")
Ele mostra a mensagem extra na barra de status self.statusBar
quando o usuário passa o ponteiro do mouse sobre esta entrada de menu.
exitAction.triggered.connect(qApp.quit)
Nós conectamos o evento que esta ação de saída é acionada no slot de saída da aplicação.
Ícones do Item do Menu PyQt5 Menubar
Temos dois métodos para definir o ícone do item de menu na barra de menu do PyQt5.
Pixmap padrão no estilo padrão do PyQt5
Podemos definir o ícone do item de menu com os ícones padrão usando o pixmap padrão no estilo padrão.
self.style().standardIcon(QStyle.SP_DialogCancelButton)
O código acima seleciona o ícone padrão de cancelamento de diálogo.
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QStyle
class basicMenubar(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.initUI()
def initUI(self):
self.setGeometry(200, 200, 200, 200)
exitAction = QAction(
self.style().standardIcon(QStyle.SP_DialogCancelButton), "&Exit", self
)
exitAction.setShortcut("Ctrl+Q")
exitAction.setStatusTip("Exit application")
exitAction.triggered.connect(qApp.quit)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu("&File")
fileMenu.addAction(exitAction)
self.setWindowTitle("PyQt5 Basic Menubar")
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = basicMenubar()
sys.exit(app.exec_())
Utilize arquivo de imagem com QIcon
Além do método acima para utilizar os ícones padrão do QStyle
, também poderíamos utilizar qualquer arquivo de imagem como ícone utilizando a classe QIcon
.
QIcon("exit.png")
Ele define o arquivo de imagem exit.png
para ser o ícone. O arquivo exit.png
deve estar na mesma pasta que o arquivo de script python.
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QStyle
from PyQt5.QtGui import QIcon
class basicMenubar(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.initUI()
def initUI(self):
self.setGeometry(200, 200, 200, 200)
exitAction = QAction(QIcon("exit.png"), "&Exit", self)
exitAction.setShortcut("Ctrl+Q")
exitAction.setStatusTip("Exit application")
exitAction.triggered.connect(qApp.quit)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu("&File")
fileMenu.addAction(exitAction)
self.setWindowTitle("PyQt5 Basic Menubar")
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = basicMenubar()
sys.exit(app.exec_())
PyQt5 Menubar Item de menu verificável
O item de menu verificável pode ser verificado ou desmarcado e o estado é alternado cada vez que o usuário clicar nele.
Precisamos definir o argumento da palavra-chave Checkable
para ser True
para tornar o item de menu verificável quando criamos o objeto QAction
.
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt
class basicMenubar(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(200, 200, 200, 200)
self.label = QLabel("The toggle state is ")
self.label.setAlignment(Qt.AlignCenter)
self.setCentralWidget(self.label)
toggleAction = QAction("&Toggle Label", self, checkable=True)
toggleAction.setStatusTip("Toggle the label")
toggleAction.triggered.connect(self.toggleLabel)
exitAction = QAction(QIcon("exit.png"), "&Exit", self)
exitAction.setShortcut("Ctrl+Q")
exitAction.setStatusTip("Exit application")
exitAction.triggered.connect(qApp.quit)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu("&File")
fileMenu.addAction(toggleAction)
fileMenu.addAction(exitAction)
self.setWindowTitle("PyQt5 Basic Menubar")
self.show()
def toggleLabel(self, state):
self.label.setText("The toggle state is {}".format(state))
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = basicMenubar()
sys.exit(app.exec_())
toggleAction = QAction("&Toggle Label", self, checkable=True)
A propriedade checkable
deve ser definida como True
para tornar o item do menu verificável quando iniciamos o objeto QAction
.
Ou podemos utilizar o método setCheckable()
depois que o objeto for criado.
self.setCheckable(True)
O estado do item verificável é o parâmetro para a função de retorno de chamada. Portanto, devemos listá-lo no argumento ao definir a função. Como em
def toggleLabel(self, state):
O state
é do tipo booleano, com o valor de True
quando selecionado e False
quando não selecionado.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook