Home > PyQt5, python > PyQt5: QToolBar

PyQt5: QToolBar

24 Aprile 2019

Torna all’indice degli appunti

QToolBar

QToolBar è una classe che mette e disposizione un pannello che può contenere diversi controlli.
Per aggiungere un controllo alla toolbar, si possono utilizzare i seguenti metodi:

addAction(QAction): aggiunge un toolbutton alla fine della toolbar;
insertAction(beforeaction, newaction): inserisce un toolbutton newaction prima del toolbutton beforeaction;
addSeparator: aggiunge un separatore alla fine della toolbar;
insertSeparator(beforeaction): inserisce un separatore prima del toolbutton beforeaction
addWidget(widget): aggiunge un widget alla fine della toolbar;
insertWidget(beforewidget, newwidget): inserisce un widget newwidget prima del widget beforewidget;

Per elencare le action presenti nella toolbar si utilizza il metodo actions:

>>> from PyQt5.QtWidgets import QApplication, QToolBar, QAction
>>> app = QApplication([])
>>> tb = QToolBar()
>>> act1 = QAction("open")
>>> act2 = QAction("new")
>>> tb.addAction(act2)
>>> tb.insertAction(act2, act1)
>>> tb.actions()
[<PyQt5.QtWidgets.QAction object at 0x03995210>, <PyQt5.QtWidgets.QAction object at 0x03995300>]
>>> tb.addSeparator()
<PyQt5.QtWidgets.QAction object at 0x039953F0>
>>> tb.actions()
[<PyQt5.QtWidgets.QAction object at 0x03995210>, <PyQt5.QtWidgets.QAction object at 0x03995300>, <PyQt5.QtWidgets.QAction object at 0x039953F0>]

Per rimuovere i controlli inseriti in una toolbar, si utilizzano i metodi:

removeAction(action): rimuove dalla toolbar la action passata come argomento;
clear: rimuove dalla toolbar tutti i controlli;

>>> tb.removeAction(act2)
>>> tb.actions()
[<PyQt5.QtWidgets.QAction object at 0x03995210>, <PyQt5.QtWidgets.QAction object at 0x039953F0>]

ICON SIZE

Il Size di default delle icone dei controlli della toolbar è 24×24.
E’ possibile modificare tali dimensioni con il metodo setIconSize(QSize).
Per sapere invece le dimensioni correnti delle icone dei controlli, si utilizza il metodo iconSize:

>>> from PyQt5.QtGui import QIcon
>>> open_icon = QIcon('open24.png')
>>> open_action = QAction(open_icon, 'Open')
>>> tb.addAction(open_action)
>>> tb.iconSize()
PyQt5.QtCore.QSize(24, 24)
>>> from PyQt5.QtCore import QSize
>>> tb.setIconSize(QSize(48, 48))
>>> tb.iconSize()
PyQt5.QtCore.QSize(48, 48)

Ecco un codice basico per vedere la toolbar in azione.

from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import (QWidget, QApplication, QBoxLayout,
                             QToolBar, QAction)
from PyQt5.QtCore import QSize
from PyQt5.QtGui import QIcon
import sys


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setWindowTitle("QToolBar Example")
        self.central_widget = FormWidget(self) 
        self.setCentralWidget(self.central_widget)
        self.resize(250, 100)


class FormWidget(QWidget):
    def __init__(self, parent):
        super(FormWidget, self).__init__(parent)
        layout = QBoxLayout(QBoxLayout.TopToBottom)
        self.setLayout(layout)
        self.toolbar = QToolBar()
        open_icon = QIcon('open.png')
        open_action = QAction(open_icon, 'Open', self)
        self.toolbar.addAction(open_action)
        tool_icon = QIcon('tools.png')
        tool_action = QAction(tool_icon, 'Tools', self)
        self.toolbar.addAction(tool_action)
        exit_icon = QIcon('exit.png')
        exit_action = QAction(exit_icon, 'Exit', self)
        self.toolbar.addAction(exit_action)
        layout.addWidget(self.toolbar, 0)
        self.toolbar.setIconSize(QSize(48, 48))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())

visivamente il risultato è:

24×24

48×48

...
        self.toolbar.setIconSize(QSize(48, 48))
...

ORIENTAMENTO

L’orientamento della toolbar può essere sia orizzontale che verticale.
Il metodo che permette di settare questa preferenza è setOrientation(orientation). Di default l’orientamento è orizzontale ma è possibile appunto modificarlo, grazie alla costante Qt.Vertical.
Per settare un orientamento verticale, ad esempio:

...
from PyQt5.QtCore import Qt
...

        self.toolbar.setIconSize(QSize(48, 48))
        self.toolbar.setOrientation(Qt.Vertical)
...

SEGNALI

Il segnale più importante relativo alla toolbar, è actionTriggered.
E’ possibile legare il segnale allo slot in maniera semplice:

...

        self.toolbar.actionTriggered.connect(self.on_tool_bar)

    def on_tool_bar(self):
            print("[SIG] clicked on a tool button...")

Oppure modificando la connessione segnale-slot, con actionTriggered[QAction], modificando la callback (slot), in modo che si aspetti la action relativa al controllo cliccato, passata come argomento:

...

        self.toolbar.actionTriggered[QAction].connect(self.on_tool_bar)

    def on_tool_bar(self, action):
            print("[SIG] clicked on tool button <%s>" % action.text())
...

Torna all’indice degli appunti

Categorie:PyQt5, python Tag: ,
I commenti sono chiusi.