Whi*_*bra 2 python qt pyqt matplotlib qscrollarea
由于我没有得到这个问题的答案,我尝试用 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_())
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么它不起作用?
您正在QWidget为每个图创建一个。但是您不会通过布局将您的canvas或toolbar放入其中,因此他们无法将大小信息与QWidget. 默认情况下, aQWidget没有,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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5458 次 |
| 最近记录: |