Skip to content

[Bug]: NavigationToolbar2QT should use @Slot annotation #27214

Closed
@bersbersbers

Description

@bersbersbers

Bug summary

https://doc.qt.io/qtforpython-6/tutorials/basictutorial/signals_and_slots.html#the-slot-class says

We recommend marking all methods used by signal connections with a @QtCore.Slot() decorator. Not doing causes run-time overhead due to the method being added to the QMetaObject when creating the connection. This is particularly important for QObject classes registered with QML, where missing decorators can introduce bugs.

NavigationToolbar2QT does not do that.

Code for reproduction

import os

from matplotlib.backends.backend_qt import NavigationToolbar2QT
from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg
from PySide6.QtWidgets import QApplication

os.environ["QT_LOGGING_RULES"] = "qt.pyside.libpyside.warning=true"

app = QApplication()
canvas = FigureCanvasQTAgg()
NavigationToolbar2QT(canvas)

Actual outcome

qt.pyside.libpyside: Warning: Registering dynamic slot "home()" on NavigationToolbar2QT. Consider annotating with @Slot()
qt.pyside.libpyside: Warning: Registering dynamic slot "back()" on NavigationToolbar2QT. Consider annotating with @Slot()
qt.pyside.libpyside: Warning: Registering dynamic slot "forward()" on NavigationToolbar2QT. Consider annotating with @Slot()
qt.pyside.libpyside: Warning: Registering dynamic slot "pan()" on NavigationToolbar2QT. Consider annotating with @Slot()
qt.pyside.libpyside: Warning: Registering dynamic slot "zoom()" on NavigationToolbar2QT. Consider annotating with @Slot()
qt.pyside.libpyside: Warning: Registering dynamic slot "configure_subplots()" on NavigationToolbar2QT. Consider annotating with @Slot()
qt.pyside.libpyside: Warning: Registering dynamic slot "edit_parameters()" on NavigationToolbar2QT. Consider annotating with @Slot()
qt.pyside.libpyside: Warning: Registering dynamic slot "save_figure()" on NavigationToolbar2QT. Consider annotating with @Slot()

Expected outcome

Silence

Operating system

Windows 10 (also Ubuntu 23.10)

Matplotlib Version

3.8.0

Matplotlib Backend

QtAgg

Python version

Python 3.12.0

Jupyter version

irrelevant

Installation

pip

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions