Resumo : neste tutorial, você aprenderá como usar a QToolBar
classe PyQt para criar widgets de barra de ferramentas.
Introdução à classe PyQt QToolBar
Uma barra de ferramentas é um painel móvel que contém um conjunto de controles. Para criar uma barra de ferramentas, você usa a QToolBar
classe:
O seguinte cria uma nova barra de ferramentas usando a QToolBar
classe e a adiciona à janela principal usando o addToolBar()
método do QMainWindowObject
:
toolbar = QToolBar('Main ToolBar')
self.addToolBar(toolbar)
Linguagem de código: Python ( python )
O setIconSize()
método do QToolBar
objeto permite definir o tamanho dos ícones que aparecem na barra de ferramentas.
Por exemplo, você pode definir o tamanho dos ícones para (16,16). Para fazer isso, você passa um QSize
objeto para o setIconSize()
método assim:
toolbar.setIconSize(QSize(16, 16))
Linguagem de código: Python ( python )
Normalmente, você adiciona botões à barra de ferramentas usando o addAction()
método:
toolbar.addAction(my_action)
Linguagem de código: Python ( python )
Para separar grupos de botões na barra de ferramentas, você usa o addSeparator()
método:
toolbar.addSeparator()
Linguagem de código: Python ( python )
Além dos botões, você pode adicionar widgets à barra de ferramentas usando o addWidget()
método.
Uma barra de ferramentas pode ser movida entre as áreas da barra de ferramentas da janela principal por padrão. Para fixar a barra de ferramentas em uma área específica, você passa False para o setMovable()
método do QToolBar
objeto.
Para definir uma área para a barra de ferramentas, você pode usar o setAllowedArea()
método. As áreas permitidas são superior, inferior, esquerda e direita.
Usando a classe PyQt QToolBar para criar uma barra de ferramentas
Continuaremos o programa editor de texto do QMenu
tutorial criando um widget na barra de ferramentas:
A seguir mostra o programa completo:
import sys
from pathlib import Path
from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit, QFileDialog, QMessageBox, QToolBar
from PyQt6.QtGui import QIcon, QAction
from PyQt6.QtCore import QSize, Qt
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowIcon(QIcon('./assets/editor.png'))
self.setGeometry(100, 100, 500, 300)
self.title = 'Editor'
self.filters = 'Text Files (*.txt)'
self.set_title()
self.path = None
self.text_edit = QTextEdit(self)
self.setCentralWidget(self.text_edit)
menu_bar = self.menuBar()
file_menu = menu_bar.addMenu('&File')
edit_menu = menu_bar.addMenu('&Edit')
help_menu = menu_bar.addMenu('&Help')
# new menu item
new_action = QAction(QIcon('./assets/new.png'), '&New', self)
new_action.setStatusTip('Create a new document')
new_action.setShortcut('Ctrl+N')
new_action.triggered.connect(self.new_document)
file_menu.addAction(new_action)
# open menu item
open_action = QAction(QIcon('./assets/open.png'), '&Open...', self)
open_action.triggered.connect(self.open_document)
open_action.setStatusTip('Open a document')
open_action.setShortcut('Ctrl+O')
file_menu.addAction(open_action)
# save menu item
save_action = QAction(QIcon('./assets/save.png'), '&Save', self)
save_action.setStatusTip('Save the document')
save_action.setShortcut('Ctrl+S')
save_action.triggered.connect(self.save_document)
file_menu.addAction(save_action)
file_menu.addSeparator()
# exit menu item
exit_action = QAction(QIcon('./assets/exit.png'), '&Exit', self)
exit_action.setStatusTip('Exit')
exit_action.setShortcut('Alt+F4')
exit_action.triggered.connect(self.quit)
file_menu.addAction(exit_action)
# edit menu
undo_action = QAction(QIcon('./assets/undo.png'), '&Undo', self)
undo_action.setStatusTip('Undo')
undo_action.setShortcut('Ctrl+Z')
undo_action.triggered.connect(self.text_edit.undo)
edit_menu.addAction(undo_action)
redo_action = QAction(QIcon('./assets/redo.png'), '&Redo', self)
redo_action.setStatusTip('Redo')
redo_action.setShortcut('Ctrl+Y')
redo_action.triggered.connect(self.text_edit.redo)
edit_menu.addAction(redo_action)
about_action = QAction(QIcon('./assets/about.png'), 'About', self)
help_menu.addAction(about_action)
about_action.setStatusTip('About')
about_action.setShortcut('F1')
# toolbar
toolbar = QToolBar('Main ToolBar')
self.addToolBar(toolbar)
toolbar.setIconSize(QSize(16, 16))
toolbar.addAction(new_action)
toolbar.addAction(save_action)
toolbar.addAction(open_action)
toolbar.addSeparator()
toolbar.addAction(undo_action)
toolbar.addAction(redo_action)
toolbar.addSeparator()
toolbar.addAction(exit_action)
# status bar
self.status_bar = self.statusBar()
self.show()
def set_title(self, filename=None):
title = f"{filename if filename else 'Untitled'} - {self.title}"
self.setWindowTitle(title)
def confirm_save(self):
if not self.text_edit.document().isModified():
return True
message = f"Do you want to save changes to {self.path if self.path else 'Untitled'}?"
MsgBoxBtn = QMessageBox.StandardButton
MsgBoxBtn = MsgBoxBtn.Save | MsgBoxBtn.Discard | MsgBoxBtn.Cancel
button = QMessageBox.question(
self, self.title, message, buttons=MsgBoxBtn
)
if button == MsgBoxBtn.Cancel:
return False
if button == MsgBoxBtn.Save:
self.save_document()
return True
def new_document(self):
if self.confirm_save():
self.text_edit.clear()
self.set_title()
def save_document(self):
# save the currently openned file
if (self.path):
return self.path.write_text(self.text_edit.toPlainText())
# save a new file
filename, _ = QFileDialog.getSaveFileName(
self, 'Save File', filter=self.filters
)
if not filename:
return
self.path = Path(filename)
self.path.write_text(self.text_edit.toPlainText())
self.set_title(filename)
def open_document(self):
filename, _ = QFileDialog.getOpenFileName(self, filter=self.filters)
if filename:
self.path = Path(filename)
self.text_edit.setText(self.path.read_text())
self.set_title(filename)
def quit(self):
if self.confirm_save():
self.destroy()
if __name__ == '__main__':
try:
import ctypes
myappid = 'mycompany.myproduct.subproduct.version'
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
finally:
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec())
Linguagem de código: Python ( python )
Como funciona (vamos nos concentrar na parte da barra de ferramentas)
Primeiro, crie um novo objeto de barra de ferramentas usando a QToolBar
classe e adicione-o à janela principal usando o addToolBar()
método.
toolbar = QToolBar('Main ToolBar')
self.addToolBar(toolbar)
Linguagem de código: Python ( python )
Em seguida, defina o tamanho dos ícones na barra de ferramentas para (16,16):
toolbar.setIconSize(QSize(16, 16))
Linguagem de código: Python ( python )
Em seguida, adicione ações novas, salvas e abertas à barra de ferramentas. Além disso, adicione um separador usando o addSeparator()
método:
toolbar.addAction(new_action)
toolbar.addAction(save_action)
toolbar.addAction(open_action)
toolbar.addSeparator()
Linguagem de código: Python ( python )
Depois disso, adicione ações de desfazer e refazer à barra de ferramentas e outro separador:
toolbar.addAction(undo_action)
toolbar.addAction(redo_action)
toolbar.addSeparator()
Linguagem de código: Python ( python )
Finalmente, adicione a ação de saída:
toolbar.addAction(exit_action)
Linguagem de código: Python ( python )
Resumo
- Use a
QToolBar
classe para criar uma nova barra de ferramentas. - Use o
addToolBar()
método para adicionar uma barra de ferramentas à janela principal. - Use o
addAction()
método para adicionar um item à barra de ferramentas. - Use o
addSeparator()
método para adicionar um separador aos botões.