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

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

我正在尝试在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_())
python matplotlib pyqt
1个回答
0
投票

我有一个类似的问题,我解决了它:

toolbar1.setMinimumWidth(canvas1.width())
toolbar2.setMinimumWidth(canvas2.width())
toolbar3.setMinimumWidth(canvas3.width())
toolbar4.setMinimumWidth(canvas4.width())

问题是当工具栏变得比画布宽时。

© www.soinside.com 2019 - 2024. All rights reserved.