Pyplot在交互时崩溃

时间:2014-04-26 07:47:59

标签: python matplotlib python-3.3 pyqt5

我有一个可以使用按钮刷新的pyplot。这很好用。但如果我尝试与pyplot进行交互(移动,调整窗口大小,缩放等),它会崩溃:

Fatal Python error: PyEval_RestoreThread: NULL tstate

是日食所说的。

以下是重现故障的运行最小示例。由于我是一个python新手,我的猜测是问题在我的代码中。

Sys:Win7 64,Python 3.3.5,PyQt 5.2.1,Scipy-stack 14.4.1

# imports
import sys
from PyQt5.QtWidgets import (QApplication, QDialog, QCheckBox, QGridLayout, QPushButton)
import matplotlib.pyplot as plt
import numpy as np

class Dialog(QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)

        # elements
        self.hold = QCheckBox("Hold")
        self.hold.setCheckable(True)
        self.refreshButton = QPushButton("Refresh")
        self.refreshButton.clicked.connect(self.refresh)

        # layout
        layout = QGridLayout()
        layout.setColumnStretch(1, 0)
        layout.setColumnMinimumWidth(1, 10)
        layout.addWidget(self.hold, 1, 0)
        layout.addWidget(self.refreshButton, 1, 1)       
        self.setLayout(layout)

        # open window
        plt.figure()
        plt.ion()
        plt.show()
        self.refresh()

    def refresh(self):
        # delete plot if hold is checked
        if not self.hold.isChecked():
            plt.clf()
        # random plot
        plt.plot(np.random.normal(10, .1, 100))
        plt.grid(True)
        plt.draw()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dialog = Dialog()
    dialog.show()
    sys.exit(app.exec_())

使用plt.draw()而不是plt.show()没有明显区别。

0 个答案:

没有答案