Нет параметров фигуры в действиях matplotlib NavigationToolbar2QT - PullRequest
1 голос
/ 03 июля 2019

Я использую PyQt5 и matplotlib для создания графического интерфейса для создания графиков.Я хотел добавить больше функциональности, когда нажимаю кнопки на панели инструментов.Например, когда я хочу что-то сделать, когда я нажимаю кнопку «Домой», я делаю:

self.toolbar._actions['home'].triggered.connect(self.do_something)

, и это работает.Однако я не могу найти действие для кнопки параметров фигуры, показанной ниже оранжевым цветом: matplotlib toolbar

, когда я делаю:

self.toolbar._actions

Возвращает

{'home': <PyQt5.QtWidgets.QAction object at 0x0000020D91ECE4C8>, 'back': <PyQt5.QtWidgets.QAction object at 0x0000020D91ECE558>, 'forward': <PyQt5.QtWidgets.QAction object at 0x0000020D91ECE5E8>, 'pan': <PyQt5.QtWidgets.QAction object at 0x0000020D91ECE708>, 'zoom': <PyQt5.QtWidgets.QAction object at 0x0000020D91ECE798>, 'configure_subplots': <PyQt5.QtWidgets.QAction object at 0x0000020D91ECE828>, 'save_figure': <PyQt5.QtWidgets.QAction object at 0x0000020D91ECE9D8>}

словарь, содержащий только 7 объектов без кнопки Параметры фигуры / оси редактирования.

Как я могу что-то сделать после нажатия кнопки параметров фигуры?

1 Ответ

2 голосов
/ 03 июля 2019

Этот QAction недоступен напрямую, но если вы проанализируете исходный код , вы увидите, что он имеет «Настроить» в виде текста, поэтому вы можете использовать findChildren для его получения:

for action in self.toolbar.findChildren(QtWidgets.QAction):
    if action.text() == "Customize":
        action.triggered.connect(self.do_something)
        break

Другой вариант - переопределить метод edit_parameters(), так как он вызывается этим QAction:

import sys
import numpy as np

from PyQt5 import QtCore, QtWidgets

from matplotlib.backends.backend_qt5agg import (
    FigureCanvas,
    NavigationToolbar2QT,
)
from matplotlib.figure import Figure


class NavigationToolbar(NavigationToolbar2QT):
    def edit_parameters(self):
        print("before")
        super(NavigationToolbar, self).edit_parameters()
        print("after")


class ApplicationWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self._main = QtWidgets.QWidget()
        self.setCentralWidget(self._main)
        layout = QtWidgets.QVBoxLayout(self._main)

        self.m_canvas = FigureCanvas(Figure(figsize=(5, 3)))
        self.m_toolbar = NavigationToolbar(self.m_canvas, self)
        layout.addWidget(self.m_canvas)
        self.addToolBar(self.m_toolbar)

        self._static_ax = self.m_canvas.figure.subplots()
        t = np.linspace(0, 10, 501)
        self._static_ax.plot(t, np.tan(t), ".")


if __name__ == "__main__":
    qapp = QtWidgets.QApplication(sys.argv)
    app = ApplicationWindow()
    app.show()
    qapp.exec_()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...