PyQt5应用程序中的matplotlib 1.4.0导致Segmentation Fault

时间:2014-08-27 22:16:51

标签: matplotlib pyqt5

在PyQt5 RAD应用程序中使用matplotlib会在Plot窗口正确显示后导致Segmentation Fault。系统:Fedora 19 3.14.17,matplotlib-1.4.0.tar.gz是从matplotlib.org下载的,并建立在这个系统上。

应用程序有一个连接到函数" doactionpushbutton"的按钮,当点击该功能时,输入的功能和带有标签"图1"是开放的,是正确的。窗口保持打开状态,直到光标移动到窗口上,此时关闭绘图窗口和主应用程序窗口,并返回分段错误消息。

由于我是mathplotlib的新手,问题是"我做错了什么?"

提前感谢您的帮助。

注意:我提供了一个缩小尺寸的完整程序来演示此问题。

适用的代码如下:

主窗口

# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created: Thu Aug 28 18:24:05 2014
#      by: PyQt5 UI code generator 5.3.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(400, 300)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.pushButton = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton.setGeometry(QtCore.QRect(20, 20, 97, 31))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralWidget)
        self.menuBar = QtWidgets.QMenuBar(MainWindow)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 27))
        self.menuBar.setObjectName("menuBar")
        MainWindow.setMenuBar(self.menuBar)
        self.mainToolBar = QtWidgets.QToolBar(MainWindow)
        self.mainToolBar.setObjectName("mainToolBar")
        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
        self.statusBar = QtWidgets.QStatusBar(MainWindow)
        self.statusBar.setObjectName("statusBar")
        MainWindow.setStatusBar(self.statusBar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))

计划

import sys
import numpy as np
from PyQt5 import QtWidgets, QtGui, QtWidgets
import matplotlib
#matplotlib.use('')
import matplotlib.pyplot as plt


from mainwindow import Ui_MainWindow

class Editor(QtWidgets.QMainWindow):

    def __init__(self):
        super(Editor, self).__init__()
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)
        self.show()
        self.ui.pushButton.clicked.connect(self.doactionpushButton)

    def doactionpushButton(self):
        self.plot_it()

    def plot_it(self):
        # red dashes, blue squares and green triangles
        t = np.arange(0., 5., 0.2)
        plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
        plt.show(block=True)


def main():
    app = QtWidgets.QApplication(sys.argv)
    ex = Editor()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:0)

下载matplotlib-master.zip并安装它可以解决问题。由于某种原因,matplotlib(1.4.0)的版本没有tcaswell提出的修正。 感谢tcaswell的帮助。