我使用matplotlib编写了一个脚本,它使用标准的matplotlib运行得很好。
表示脚本是以图为一类编写的,调用Plot()就足够了。现在我想在工具栏中添加一些按钮,为此我使用qt4agg因为我已经通过Anaconda安装了matplotlib。在编写主窗口的代码时,我使用了this示例,它运行得很好。为了使用我已编写的绘图脚本,我想将QT脚本中创建的图形传递给Plot() - 类。
此解决方案工作正常,直到我尝试关闭窗口。窗口关闭,python崩溃。它崩溃了,即使我没有调用Plot() - 类,并且让它不崩溃的唯一方法是删除导入文件的行。在将脚本导入窗口时,我需要考虑一些特殊内容吗?
from __future__ import print_function
import sys
from matplotlib.figure import Figure
from matplotlib.backend_bases import key_press_handler
### LINE CAUSING TROUBLE
from plotting import Plot
###
from test import *
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.backends import qt_compat
use_pyside = qt_compat.QT_API == qt_compat.QT_API_PYSIDE
if use_pyside:
print ("USING PYSIDE")
from PySide.QtCore import *
from PySide.QtGui import *
else:
print("NOT USING PYSIDE")
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class AppForm(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.create_main_frame()
self.on_draw()
def create_main_frame(self):
self.main_frame = QWidget()
self.fig = Figure()
self.canvas = FigureCanvas(self.fig)
self.canvas.setParent(self.main_frame)
self.canvas.setFocusPolicy(Qt.StrongFocus)
self.canvas.setFocus()
self.mpl_toolbar = NavigationToolbar(self.canvas, self.main_frame)
self.canvas.mpl_connect('key_press_event', self.on_key_press)
vbox = QVBoxLayout()
vbox.addWidget(self.canvas)
vbox.addWidget(self.mpl_toolbar)
self.main_frame.setLayout(vbox)
self.setCentralWidget(self.main_frame)
def on_draw(self):
self.fig.clear()
#Plot(self.fig)
self.canvas.draw()
def on_key_press(self, event):
key_press_handler(event, self.canvas, self.mpl_toolbar)
def main():
app = QApplication(sys.argv)
form = AppForm()
form.show()
app.exec_()
if __name__ == "__main__":
main()
这是另一个文件的压缩版本仍然会导致错误。
import matplotlib.pyplot as pplt
class Plot():
def __init__(self, figure=pplt.figure()):
self.figure = figure
答案 0 :(得分:0)
我遇到了与 Anaconda 和 Python(x,y)相同的问题。然后我尝试从头开始安装 Python :
它无法解决所有崩溃问题。你也可以试试这个:
self.setAttribute(Qt.WA_DeleteOnClose)
例如:
class AppForm(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.setAttribute(Qt.WA_DeleteOnClose) # <---
self.create_main_frame()
self.on_draw()
...