这两天动手做了个python小程序exe,实现读图片文字功能。UI采用了QT
windows8.1,几个月没有碰环境了有些生疏,重新梳理了一遍。上手之后就开始干活。在Anoconda虚拟机环境下安装pyqt5.默认装好PyQt5,
命令:pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
Qt Designer:设计界面UI文件,然后UI文件转py文件,可以是输入命令,或者用pycharm 的外部工具设置(配置:在pycharm settings里面加入外部工具external tools,一个是design,一个Pyuic,选择exe所在路径)。我两种方法都尝试了。
先安装设计:
pip install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
在目录下在exe:G:\Program Files\Anaconda3_64\envs\tensorflow\Lib\site-packages\pyqt5_tools\Qt\bin
designer.exe
双击可以运行,这个路径可以放到pycharm的external tools中,右键就可以选择启动。
设计好图形界面之后,就可以转为py文件,可以是输入命令,或者用python的外部工具设置。
一、
命令
pyuic5 -o test.py p2w.ui
这种比较麻烦,要一直开着cmd窗口。
二、
或者在pycharm里面的external tools,右键选择pyuic就对应转了。
出现问题:
‘C:/Program’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。---------pyuic5生成py文件
解决方法:
找到G:\Program Files\Anaconda3_64\Library\bin 的pyuic5.bat,在文件路径前后加英文双引号。
生成的py只是布局相关的,如果要控制还需要加入一些类和函数。
用系统的对话框选择文件
QFileDialog.getOpenFileName(self, “选择文件”, “/”, “All Files ();;png Files (.png)”)
Label显示文本:
#self.label_2.setFixedSize(500, 150)
#self.label_2.move(550, 20)
#self.label_2.setText(text)
PlainTextEdit显示文本
self.ui.plainTextEdit.clear()
self.ui.plainTextEdit.appendPlainText(text)
注意,这个plainTextEdit是在ui下的,不同于label。
copy按键
def copyword(self):
self.ui.plainTextEdit.selectAll()
self.ui.plainTextEdit.copy()
安装pyinstaller
pip install PyInstaller
由于没注意,安装到base虚拟环境下了,没有在自己的虚拟机上。造成诸多问题。下面一一道来。
打包:
pyinstaller -F -w test.py
-F:将所有内容全部打包成一个exe可执行文件,而不会有其它的一些奇奇怪怪的小依赖文件。
-w:运行生成的exe文件时,不会弹出命令行窗口,而是直接弹出我们做的GUI。
成功!一阵欢喜,但是。。。
双击test.exe并没有打开界面,而是出现了错误!
双击exe运行后打不开,出现错误:
pycharm fail to excute script test
搜索各大神的解决方法。
有人说要在qt上添加,如下:
if hasattr(sys, ‘frozen’):
os.environ[‘PATH’] = sys._MEIPASS + “;” + os.environ[‘PATH’]
from PyQt5 import QtCore, QtGui, QtWidgets
打包,双击,还是出现上面的问题。。。
怎么办?继续搜索。
又有一方法:
pyinstaller.exe -F -w “G:\Program Files\Anaconda3_64\envs\tensorflow\Lib\site-packages\PyQt5\Qt\bin”
这次是’C:/Program’ 不是内部或外部命令,好熟悉。
后来想起pyinstaller.exe是安装在哪里的?搜了一下在Anaconda3_64下面。
PyInstaller当时随手一装,并不在虚拟环境tensorflow下。
pip uninstall PyInstaller,之后activate 虚拟环境后pip install PyInstaller
打包
pyinstaller -F -w test.py
报错1:Maximum recursion depth exceeded 搜索各位大神的解决方案。提到
ast这个模块自身调用太多次递归,超出了python默认递归的深度,默认深度1000,这一步错误,但是会产生一个.spec文件
2.在.spec文件中增加两行(添加在原文件第二行),对递归深度进行设置:
找到test.spec文件添加在第二行后:
import sys
sys.setrecursionlimit(100000)**
打包:
pyinstaller test.spec
exe出来了,双击,如设计!ok!
感谢各位大神提供的思路!
补充,后面包括设计、命令,都是在pycharm下进行。它直接在设置的虚拟环境中安装或运行。