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()
你可以简化这个例子,不使用'Ui_MainWindow'。如此,我无法运行此示例,因此不知道问题出在mpl端还是我们看不到的代码中。我怀疑问题是你也有pyqt4设置和pyplot启动pyqt4,因此事情爆炸。尝试在导入pyplot之前添加'import matplotlib'和'matplotlib.use('qt5agg')''。 – tacaswell 2014-08-27 23:36:50
谢谢 - 尝试了你所建议的“导入”和“使用”。 虽然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
那么我怀疑它是'QtAgg''。 – tacaswell 2014-08-28 20:51:21