Matplotlib窗口上的滚动条(多个)

时间:2018-10-02 02:03:34

标签: python

如果我只想在代码中绘制1个图形,则下面的页面为我提供了一个完美的答案。但是,当我想再次使用该功能时:

a = ScrollableWindow(fig)

我的间谍程序显示“内核死亡,重新启动”。并删除所有数据。有什么方法可以多次调用此函数?

Scrollbar on Matplotlib showing page

提取的代码:

import matplotlib
# Make sure that we are using QT5
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
from PyQt5 import QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar


class ScrollableWindow(QtWidgets.QMainWindow):
    def __init__(self, fig):
        self.qapp = QtWidgets.QApplication([])

        QtWidgets.QMainWindow.__init__(self)
        self.widget = QtWidgets.QWidget()
        self.setCentralWidget(self.widget)
        self.widget.setLayout(QtWidgets.QVBoxLayout())
        self.widget.layout().setContentsMargins(0,0,0,0)
        self.widget.layout().setSpacing(0)

        self.fig = fig
        self.canvas = FigureCanvas(self.fig)
        self.canvas.draw()
        self.scroll = QtWidgets.QScrollArea(self.widget)
        self.scroll.setWidget(self.canvas)

        self.nav = NavigationToolbar(self.canvas, self.widget)
        self.widget.layout().addWidget(self.nav)
        self.widget.layout().addWidget(self.scroll)

        self.show()
        # exit(self.qapp.exec_())


# create a figure and some subplots
fig, axes = plt.subplots(ncols=4, nrows=5, figsize=(16,16))
for ax in axes.flatten():
    ax.plot([2,3,5,1])

# pass the figure to the custom window
a = ScrollableWindow(fig)

注意:我对代码“ exit(self.qapp.exec_())”进行了标记,因为我的python内核在不这样做时会重新启动。另外,如果我将其替换为“ self.qapp.exec_()”,则只能调用一次函数(与上述问题相同)。

0 个答案:

没有答案