gpt4 book ai didi

python - pyqt中的多个嵌入式matplotlib Canvas 在鼠标悬停时改变大小

转载 作者:太空宇宙 更新时间:2023-11-03 14:20:58 26 4
gpt4 key购买 nike

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

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

我已经在Windows(Anaconda 5.0.1)中的Python 3.6中尝试过此操作,在Linux(KDE Neon 64位)中使用PyQt4和Python 3.5.2,并使用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_())

最佳答案

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

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

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

关于python - pyqt中的多个嵌入式matplotlib Canvas 在鼠标悬停时改变大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47947828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com