gpt4 book ai didi

python - 使用 PyQt 和 matplotlib 在可滚动小部件中显示多个图

转载 作者:行者123 更新时间:2023-12-02 01:15:18 26 4
gpt4 key购买 nike

因为我没有得到 this 的答案问题我尝试用 PyQt 解决它。显然,当涉及到 QScrollArea 时,这并没有那么容易......

我写了一个小测试,基本上可以满足我的要求,但它没有像我预期的那样显示滚动区域和其中的绘图:

from PyQt4 import QtCore, QtGui
import os,sys

#import matplotlib
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar
from matplotlib.figure import Figure

qapp = QtGui.QApplication(sys.argv)
qwidget = QtGui.QWidget()
qwidget.setGeometry(QtCore.QRect(0, 0, 500, 500))
qlayout = QtGui.QHBoxLayout(qwidget)
qwidget.setLayout(qlayout)

qscroll = QtGui.QScrollArea(qwidget)
qscroll.setGeometry(QtCore.QRect(0, 0, 500, 500))
qscroll.setFrameStyle(QtGui.QFrame.NoFrame)
qlayout.addWidget(qscroll)

qscrollContents = QtGui.QWidget()
qscrollLayout = QtGui.QVBoxLayout(qscrollContents)
qscrollLayout.setGeometry(QtCore.QRect(0, 0, 1000, 1000))

qscroll.setWidget(qscrollContents)
qscroll.setWidgetResizable(True)

for i in xrange(5):
qfigWidget = QtGui.QWidget(qscrollContents)
fig = Figure((5.0, 4.0), dpi=100)
canvas = FigureCanvas(fig)
canvas.setParent(qfigWidget)
toolbar = NavigationToolbar(canvas, qfigWidget)
axes = fig.add_subplot(111)
axes.plot([1,2,3,4])
qscrollLayout.addWidget(qfigWidget)

qscrollContents.setLayout(qscrollLayout)

qwidget.show()
exit(qapp.exec_())

谁能解释为什么它不起作用?

最佳答案

您正在为每个绘图创建一个 QWidget。但是您没有通过布局将 canvastoolbar 放入其中,因此它们无法与 QWidget 传递大小信息。默认情况下,QWidget 没有minimumSize 并且 QScrollArea 中的小部件/布局可以使它们尽可能小以适应可用空间(即 QScrollArea 的大小)。

通过布局添加图表会有所帮助,但我发现 FigureCanvas 小部件也没有任何最小尺寸,因此它可以缩小。为了快速修复,您可以设置一个 minimumSize。包含这些修复的循环部分应如下所示:

for i in xrange(5):
qfigWidget = QtGui.QWidget(qscrollContents)

fig = Figure((5.0, 4.0), dpi=100)
canvas = FigureCanvas(fig)
canvas.setParent(qfigWidget)
toolbar = NavigationToolbar(canvas, qfigWidget)
axes = fig.add_subplot(111)
axes.plot([1,2,3,4])

# place plot components in a layout
plotLayout = QtGui.QVBoxLayout()
plotLayout.addWidget(canvas)
plotLayout.addWidget(toolbar)
qfigWidget.setLayout(plotLayout)

# prevent the canvas to shrink beyond a point
# original size looks like a good minimum size
canvas.setMinimumSize(canvas.size())

qscrollLayout.addWidget(qfigWidget)

关于python - 使用 PyQt 和 matplotlib 在可滚动小部件中显示多个图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12234917/

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