2016-07-27 67 views
0

我正在开发一个使用Python 3.4和PyQt4与LiClipse作为IDE的应用程序,并有绘图关闭整个程序没有错误后,我编译到可执行文件的程序后出现问题。我已经指出了问题领域,并知道调用matplotlib.figure.Figure()是崩溃的罪魁祸首,但我不知道从哪里去。EXE与MatplotLib崩溃

import matplotlib 
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 
from matplotlib.figure import Figure 
class GraphWidget(FigureCanvas): 
    def __init__(self,parent=None,width = 500, height = 600, dpi = 100): 

     self.width = width/dpi 
     self.height = height/dpi 
     self.dpi = dpi 

     #================crashes here=============# 
     self.figure = Figure((self.width,self.height), dpi=self.dpi) 
     #=========================================# 

     alert = QMessageBox() 
     alert.setText("Passed Figure()") 
     alert.exec_() 

     FigureCanvas.__init__(self,self.figure) 
     alert = QMessageBox() 
     alert.setText("Passed super init") 
     alert.exec_() 

     self.canvas = self 
     self.axis = self.figure.add_subplot(111) 
     self.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding) 
     self.parent = parent 

    def set_new_graph(self,data,labels): 
     self.layoutVert = QVBoxLayout(self) 
     size = QSize(self.width*self.dpi,self.height*self.dpi) 

     self.axis.hold(False) 

     mined = min(data.totalamount) - round(min(data.totalamount)*.1,0) 
     if mined > 0: mined = 0 
     maxed = max(data.totalamount) + round(max(data.totalamount)*.1,0) 
     if maxed == mined: maxed += 5 

     data.plot(x = data.totalamount 
        , ax = self.axis 
        , kind = 'bar' 
        , rot=0 
        , legend = False 
        , sharex = True 
        , sharey = True 
#     , xticks = labels 
        , ylim = (mined,maxed) 
        , table = False) 
#   self.axis.set_ylim(mined,maxed) 
     self.axis.set_xticklabels(labels, fontsize = 'small') 

     self.axis.set_title("Sales History over Past Year") 
     self.canvas.draw() 
     self.resize(size) 
     self.layoutVert.addWidget(self.canvas) 

我py2exe的安装脚本生成的所有功能时的曲线在页面上初始化,除了一个可用的可执行文件:

mpld = matplotlib.get_py2exe_datafiles() 
include = ['sip','pandas','reportlab' 
     , 'PyQt4' 
     , 'PyQt4.QtGui' 
     , 'PyQt4.QtCore' 
     , 'PyQt4.Qt' 
     ,'reportlab.rl_settings','scipy','win32com' 
     ,'win32com.client' 
     , 'matplotlib' 
     , 'matplotlib.backends' 
     , 'matplotlib.backends.backend_qt4agg' 
     , 'matplotlib.figure' 
     ] 

exclude = ['nbformat','win32com.gen_py',"six.moves.urllib.parse", 
    '_gtkagg', '_tkagg', '_agg2', 
    '_cairo', '_cocoaagg', 
    '_fltkagg', '_gtk', '_gtkcairo'] 

setup(name="ServiceMgmt", 
     # console based executables 
     console=[], 

     # windows subsystem executables (no console) 
     windows=['ServiceMgmt.py'], 

     # py2exe options 
     #zipfile=None, 
     options={"py2exe": py2exe_options}, 
     data_files=mpld 
     ) 

我能够运行我的应用程序的所有其他功能的可执行文件,但没有问题。没有显示可见的错误,并且在编译之前应用程序正常工作。

谢谢你的帮助。

+0

[mcve]会很有用。例如,整个setup.py会告诉我'data_files = matplotlib.get_py2exe_datafiles()'是否出现在[answer](http://stackoverflow.com/a/11062854/5781248) –

+0

@JJHakala,我已经更新了安装脚本。我确实使用data_files = matplotlib.get_py2exe_datafiles() –

回答

0

我的故障排除发现numpy.core是我的问题的罪魁祸首。我重新安装numpy,现在可执行文件正常运行。