利用PyQt5以及Pyinstaller制作GUI小工具
想要设计一个计算COSI的小工具,把之前写的Python制作GUI的教程综合一下(配置PyQt及设计GUI、Pyinstaller打包GUI),也记录一下整体的设计过程。
0 环境
- 系统: win7
- Python : 3.6.4
- PyQT5 :用于创建GUI界面
- Pyinstall 3.4: 用于打包成CUI小程序
- 其他包,需根据个人算法进行下载、安装
1 构思
基本设计如下,需要四个输入,一个输出:
工具界面参照Arcmap10.2的设计元素:
2 绘制界面
基本界面就是这样:
利用PyQt设计完成后,保存为.ui文件。随后,利用配置好的工作pyuic转为.py文件。
3 建立槽函数
在这里,我们假定由.ui界面转换为py文件的为window.py,需要调用的算法文件为algo.py,主函数文件为main.py。
主要分三步:
- window.py中建立信号;
- main.py中根据信号建立槽函数;
- 将写好的alo.py代码,放入执行键的槽函数中。
一些细节如下:
- 我们编制好的界面有五个按钮,需要分别设置不同的功能,这就需要我们在windows.py中建立信号。
# 在window.py里,写槽
self.pushButton.clicked.connect(MainWindow.p1_ck)
self.pushButton_2.clicked.connect(MainWindow.p2_ck)
self.pushButton_3.clicked.connect(MainWindow.p3_ck)
self.pushButton_4.clicked.connect(MainWindow.p4_ck)
self.pushButton_5.clicked.connect(MainWindow.p5_ck)
self.pushButton_6.clicked.connect(MainWindow.p6_ck)
- 在main.py里,将对应信号(点击动作),写成槽函数。最终要的是,将“确定”、“执行”那个键,写的丰富一点,把判错函数多写一些。防止使用者出现频繁报错。
import windows_1
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QFileDialog
# 常用的几个应用
aspect_path = QFileDialog.getOpenFileName(caption="Open Aspect file-path: ", directory='./',
filter='Tif File(*.tif);;All Files(*)') # 浏览获取输入位置
self.lineEdit.setText(aspect_path[0]) # 设立线编辑内容
self.cosi_path = QFileDialog.getSaveFileName(caption='Save COSI file-path', directory='./',
filter='Tif File(*.tif)') # 浏览获取输出位置
aspect_path = self.lineEdit.text() # 获取线编辑内容
self.textEdit.append('\n 输入的太阳方位角为:' + sun_azimuth) # 文本框内容增加
self.textEdit.clear() # 清除文本框内容
以上是添加文本框内容和获取文本框内容,具体高级应用,应详见PyQt5中QtWidget中的类函数.
- 执行测试:
3 打包
pyinstaller工具使用起来很方便,相关操作如下:
实际操作如下:
完成。
细节如配置PyQt5环境与安装pyinstaller,请详见:
(配置PyQt及设计GUI与Pyinstaller打包GUI)
-------------------------20190312更新--------------------------------
注: 尽量把所有的算法,都放在main.py同一个文件夹下进行打包,不要使用-p,经实测,使用-p查找所使用的包,会增多打包的时间,并且软件的大小会变大,软件启动的效率会变慢。
# 把软件打包成一个小程序,不加-F就默认打包成一个文件夹 pyinstaller main.py -F -i tb.icon