多个嵌入式matplotlib画布在pyqt上改变了鼠标尺寸

时间:2017-12-22 21:58:00

标签: python matplotlib pyqt

我正在尝试在PyQt GUI中的多列布局中嵌入多个matplotlib图。乍一看,我成功地设置了所需的布局,但当将鼠标移动到任何画布上时,它们会改变大小并“闪烁”。按下工具栏上的缩放按钮时,这会变得更加明显。

对于每个matplotlib画布,我连接了一个工具栏。如果我没有连接工具栏,则不会出现问题。我尝试过几种方式安排工具栏和画布 - 使用QGridLayout或嵌套的QVBoxLayouts和QHBoxLayouts。无论哪种方式,如果彼此相邻的地块出现问题。如果我将所有图表放在一个列中,它就不会。

我已经在Windows(Python Anaconda 5.0.1)中使用PyQt4和Linux 3.5中的Python 3.5.2(KDE Neon 64位)以及PyQt4和PyQt5(v.5.7.1),matplotlib 1.5进行了尝试。 1但结果相同。我也尝试使用add_axes而不是add_subplot。有人可以帮我理解导致这种情况的原因或找到某种解决方法吗?我不能使用matplotlib子图。

from PyQt5 import QtCore, QtGui, QtWidgets
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar

class Window(QtWidgets.QWidget):
    def __init__(self):
        super(Window, self).__init__()

        figure1 = Figure()
        figure2 = Figure()
        figure3 = Figure()
        figure4 = Figure()
        canvas1 = FigureCanvas(figure1)
        canvas2 = FigureCanvas(figure2)
        canvas3 = FigureCanvas(figure3)
        canvas4 = FigureCanvas(figure4)
        ax1 = figure1.add_subplot(111)
        ax2 = figure2.add_subplot(111)
        ax3 = figure3.add_subplot(111)
        ax4 = figure4.add_subplot(111)

        toolbar1 = NavigationToolbar(canvas1, self)
        toolbar2 = NavigationToolbar(canvas2, self)
        toolbar3 = NavigationToolbar(canvas3, self)
        toolbar4 = NavigationToolbar(canvas4, self)

        mainLayout = QtWidgets.QGridLayout()
        mainLayout.addWidget(toolbar1,0,0)
        mainLayout.addWidget(toolbar2,0,1)
        mainLayout.addWidget(toolbar3,2,0)
        mainLayout.addWidget(toolbar4,2,1)
        mainLayout.addWidget(canvas1,1,0)
        mainLayout.addWidget(canvas2,1,1)
        mainLayout.addWidget(canvas3,3,0)
        mainLayout.addWidget(canvas4,3,1)

        self.setLayout(mainLayout)
        self.setWindowTitle("Flow Layout")

if __name__ == '__main__':

    import sys

    app = QtWidgets.QApplication(sys.argv)
    mainWin = Window()
    mainWin.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,并且通过以下方式解决了该问题:

System.ComponentModel.Annotations.4.6.0-preview.19073.11/lib/net461/System.ComponentModel.Annotations.dll

问题在于工具栏变得比画布宽。