【问题标题】:No figure options in matplotlib NavigationToolbar2QT actionsmatplotlib NavigationToolbar2QT 操作中没有图形选项
【发布时间】:2019-11-14 01:19:25
【问题描述】:

我正在使用 PyQt5 和 matplotlib 制作用于制作绘图的 GUI。当我按下工具栏按钮时,我想添加更多功能。例如,当我想在单击主页按钮时做某事时:

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

它有效。但是,我找不到下面以橙色显示的图形选项按钮的操作:

当我这样做时:

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 个没有图形选项/编辑轴按钮的对象。

点击图形选项按钮后如何操作?

【问题讨论】:

    标签: python matplotlib pyqt5


    【解决方案1】:

    QAction 不能直接访问,但如果您分析 source code,您会发现它具有“自定义”作为文本,因此您可以使用 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_()
    

    【讨论】:

    • 谢谢!有效。 edit_parameters() 是否被所有改变参数的按钮调用?
    猜你喜欢
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    相关资源
    最近更新 更多