导航工具栏平移和缩放按钮/图标在 matplotlib 中处于活动状态时不会突出显示背景

问题描述 投票:0回答:1

我使用 PySide6 和 Qt 设计器在 python 中构建了一个应用程序,其中我将 matplotlibWidget 添加到窗口

main_plot_container
并将 NavigationToolbar2QT 添加到位于
tb_frame
顶部的
main_plot_container
。我想通过将其移出绘图区域并为其提供自定义图标来自定义工具栏。一切都很好——这已经完成并且工作正常。我遇到的唯一问题是,当有人单击平移或缩放按钮/图标时,它们不会在视觉上表明它们处于活动状态(活动时请勿突出显示背景)。这会导致用户感到困惑,尝试单击其他按钮而不知道这些按钮已经处于活动状态。下面的代码片段说明了这是如何编码的。

from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as Canvas

class MatplotlibWidget(QWidget):
    def __init__(self, parent=None):
        super(MatplotlibWidget, self).__init__(parent)        
        self.toolbar = NavigationToolbar(self.canvas, self)
        self.figure, self.subplot_dict = plt.subplots()
        self.canvas = Canvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas, self)
        self.layout.addWidget(self.canvas)
        ....

class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.mpl_widget = MatplotlibWidget(self.ui.main_plot_container)
        self.ui.main_plot_container.layout().addWidget(self.mpl_widget)
        self.ui.tb_frame.layout().addWidget(self.mpl_widget.toolbar)
        icons_buttons = {
            "Home": QtGui.QIcon(":/icons/icons/home.svg"),
            "Pan": QtGui.QIcon(":/icons/icons/move.svg"),
            "Zoom": QtGui.QIcon(":/icons/icons/zoom-in.svg"),
            "Back": QtGui.QIcon(":/icons/icons/corner-up-left.svg"),
            "Forward": QtGui.QIcon(":/icons/icons/corner-up-right.svg"),
            "Save": QtGui.QIcon(":/icons/icons/save.svg"),
            "Subplots": QtGui.QIcon(":/icons/icons/sliders.svg"),
            "Customize": QtGui.QIcon(":/icons/icons/trending-up.svg")}
        for action in self.toolbar.actions():
            if action.text() in icons_buttons:
                action.setIcon(icons_buttons.get(action.text(), QtGui.QIcon()))
        ....

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


python v3.11 
matplotlib v3.7.4
PySide6 v6.5.1
Qt v6.5.1
qt matplotlib qt-designer pyside6 matplotlib-widget
1个回答
0
投票

我能够找到这个问题的根本原因。其他非导航工具栏按钮的 Qt QPushButton 和 QToolButton styleSheet 格式以某种方式导致了这种奇怪的行为。

QToolButton, QPushButton{
    border: nine;}

我通过从格式中删除 QToolButtons 解决了这个问题。

QPushButton{
    border: nine;}
© www.soinside.com 2019 - 2024. All rights reserved.