Python 使用PyQt滚动区域缩放子地块
有没有办法为动态数量的子批次设置一英寸的固定高度?我所做的是创建了一个函数,它定义了一个缩放因子,该因子根据子地块的数量显示子地块大约一英寸,但当我超出模型函数的范围或一次添加一个子地块时,问题就会出现。有没有一个更优雅的解决方案,总是给我一个精确的英寸?谢谢你的帮助。代码取自Python 使用PyQt滚动区域缩放子地块,python,matplotlib,Python,Matplotlib,有没有办法为动态数量的子批次设置一英寸的固定高度?我所做的是创建了一个函数,它定义了一个缩放因子,该因子根据子地块的数量显示子地块大约一英寸,但当我超出模型函数的范围或一次添加一个子地块时,问题就会出现。有没有一个更优雅的解决方案,总是给我一个精确的英寸?谢谢你的帮助。代码取自 是否希望每个子批次的高度为1英寸?是的,每个子批次的高度应正好为1英寸。 from PyQt4 import QtGui, QtCore import sys import matplotlib from matplo
是否希望每个子批次的高度为1英寸?是的,每个子批次的高度应正好为1英寸。
from PyQt4 import QtGui, QtCore
import sys
import matplotlib
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
from matplotlib.figure import Figure
class Canvas(FigureCanvasQTAgg):
def __init__(self, parent=None):
self.figure = Figure()
super(Canvas, self).__init__(self.figure)
self.ax1 = self.figure.add_subplot(1,1,1)
self.figure.subplots_adjust(left = 0.05, bottom = 0.02, right = 0.98, top = 0.99)
self.setMinimumWidth(1000)
self.ax1.plot([1,2,3])
self.draw()
def add_subplot(self, data=[]):
rows = len(self.figure.axes) + 1
for index, axes in enumerate(self.figure.axes, start=1):
axes.change_geometry(rows, 1, index)
ax = self.figure.add_subplot(rows, 1, index+1)
ax.plot(data)
ax.patch.set_facecolor('None')
self.figure.set_figheight(self.figure.get_figheight()*self.figScalingfactor)
def figScaling(self, numSubplot):
self.figScalingfactor = round(1.1729*pow(numSubplot, -0.028),3)
class Window(QtGui.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.showMaximized()
self.widget = QtGui.QWidget()
self.setCentralWidget(self.widget)
self.widget.setLayout(QtGui.QVBoxLayout())
self.widget.layout().setContentsMargins(0,0,0,0)
self.widget.layout().setSpacing(5)
self.canvas = Canvas(self)
self.scroll = QtGui.QScrollArea(self.widget)
self.scroll.setWidget(self.canvas)
self.scroll.setWidgetResizable(False)
self.numSubplots = 50
self.canvas.figScaling(self.numSubplots)
for x in range(self.numSubplots):
self.canvas.add_subplot()
self.canvas.adjustSize()
self.canvas.draw()
self.widget.layout().addWidget(self.scroll)
def main():
app = QtGui.QApplication(sys.argv)
app.aboutToQuit.connect(app.deleteLater)
GUI = Window()
GUI.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()