2014-08-27 37 views
1

在PyQt5 RAD应用程序中使用matplotlib导致分割错误在绘图窗口显示正确之后。系统:Fedora 19 3.14.17,matplotlib-1.4.0.tar.gz是从matplotlib.org下载的,并构建在这个系统上。PyQt5应用程序中的matplotlib 1.4.0导致分割错误

该应用程序有一个连接到函数“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() 
+0

你可以简化这个例子,不使用'Ui_MainWindow'。如此,我无法运行此示例,因此不知道问题出在mpl端还是我们看不到的代码中。我怀疑问题是你也有pyqt4设置和pyplot启动pyqt4,因此事情爆炸。尝试在导入pyplot之前添加'import matplotlib'和'matplotlib.use('qt5agg')''。 – tacaswell 2014-08-27 23:36:50

+0

谢谢 - 尝试了你所建议的“导入”和“使用”。 虽然PyQt网站表示PyQt4和PyQt5可以一起生活,但系统回应如下。将尝试整合一个更简洁的失败示例。 ValueError:无法识别的后端字符串“qt5agg”:有效字符串为['pgf','cairo','MacOSX','CocoaAgg','gdk','ps','GTKAgg','GTK','QtAgg', '模板','FltkAgg','emf','GTK3Cairo','GTK3Agg','WX','Qt4Agg','TkAgg','agg','svg','GTKCairo','WXAgg','pdf '] – 2014-08-28 20:18:13

+0

那么我怀疑它是'QtAgg''。 – tacaswell 2014-08-28 20:51:21

回答

0

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

相关问题