PyQt4及py2exe使用时的一些错误及解决方案

昨天尝试使用PyQt4为Caffe测试程序写了一个界面程序,又把这个python程序转换成了.exe.这过程遇到了不少问题,有的已经解决,有的没有解决,还希望高手帮忙。

先贴出我的界面吧,忙了一天看看成果:


一、使用PyQt4开发界面还是很容易的,大的问题遇到了两个一个解决一个未解决。先说没有解决的问题吧,望高手指点

1、我们看到界面有很多相似的地方如第一行,第二行,第五行,第六行,第七行,这几行的功能类似,都是点击选择按钮后从文件对话框中选择一个文件,因此我想写一个通用的槽函数,参数就是QLineEidt,来选择哪个QLineEdit,但是没有成功。我不知道槽函数是否可以携带参数。最终只能为每个按钮单独写一个槽函数了。

2、从QLineEdit中获得字符串是类型是QString,因此我们需要转换成str类型,这个问题也废了我好长时间,还好最后解决了。

总体来说整个过程还是很简单的,网上的资料也很多,大家有问题可以多问问百度,google。

二、py2exe的作用是将python程序编译成.exe程序这样我们可以脱离python环境,直接在windows下运行程序。如何安装py2exe和基本使用我这里就不讲了,给大家几个链接:

安装和使用:http://blog.csdn.net/linda1000/article/details/12909439

py2exe 打包scipy时遇到的问题:http://www.bubuko.com/infodetail-1284747.html

http://stackoverflow.com/questions/20169728/exe-created-with-py2exe-doesnt-work-and-returns-logfile-with-errors

http://blog.csdn.net/agoago_2009/article/details/7292507

1、第一个问题是找不到*****.dll

可以参考这个链接:http://blog.csdn.net/ablo_zhou/article/details/5295750

我是搜索到***.dll后直接复制到了Python下DLLs文件中,不过这样有两个问题,一个是可能所需的dll非常多,那我们复制操作会很繁琐,第二个是我们破坏了DLLs文件的原有结构。我有个想法是把所需的dll文件的路径加入环境变量中,但是我没有尝试。

2、如果解决了第一个问题,一般转换会成功,但是当我们双击.exe是会提示找不到各种模块,这是因为我们没有把相应的模块打包进来,所以需要我们手动添加。这部分我们可以参考第二个链接。


3、提示没有找到data_file,还是可以参考第二个链接。

PyQt4及py2exe使用时的一些错误及解决方案_第1张图片

如果你不知道需要什么模块和dll,那你只能和我一样一次次尝试,看错误提示,添加,再尝试。这个过程可能会很长。

最后贴出我的代码:

from distutils.core import setup
import py2exe
import glob

'''
setup(
    console=['LfwGuiGrid.py'],
     options={
        'py2exe': {
            r'includes': [r'scipy.sparse.csgraph._validation',
                          r'scipy.special._ufuncs_cxx',
                          r'sklearn.utils.lgamma',
                          r"matplotlib.backends",
                          r"matplotlib.backends.backend_tkagg",
                          r"matplotlib.figure",
                          r"matplotlib.pyplot",
                          r"matplotlib.backend_bases"]
            }
    }
)
'''
opts = {
'py2exe':{r'includes':[r'scipy.sparse.csgraph._validation',
                          r'scipy.special._ufuncs_cxx',
                          r'sklearn.utils.lgamma',
                          r"matplotlib.backends",
                          r"matplotlib.backends.backend_tkagg",
                          r"matplotlib.figure",
                          r"matplotlib.pyplot",
                          r"matplotlib.backend_bases",
                          r'matplotlib.backends.backend_qt4agg',
                          r'skimage.io',
                          r'skimage.transform',
                          r'skimage._shared.geometry',
                          r'skimage.filters.rank.core_cy',
                          r'google.protobuf.internal',
                          r'google.protobuf.internal.enum_type_wrapper',
                          r'google.protobuf.descriptor']
    }
}
data_files= [(r'mpl-data',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\*.*')),
#Because matplotlibrc does not have an extension, glob does not findit (at least I think that's why)  
#So add it manually here:  
(r'mpl-data',[r'D:\Anaconda\Lib\site-packages\matplotlib\mpl-data\matplotlibrc']),  
(r'mpl-data\images',glob.glob(r'D:\Anaconda\Lib\site-packages\matplotlib\mpl-data\images\*.*')),
(r'mpl-data\fonts',glob.glob(r'D:\Anaconda\Lib\site-packages\matplotlib\mpl-data\fonts\*.*')),
(r'mpl-data\stylelib',glob.glob(r'D:\Anaconda\Lib\site-packages\matplotlib\mpl-data\stylelib\*.*'))]

setup(console=['LfwGuiGrid.py'],options=opts,data_files=data_files)




你可能感兴趣的:(PyQt4及py2exe使用时的一些错误及解决方案)