桌面写一个工具,有时候核心流程已经明白怎么实现了,但是需要有一层GUI裹着这套逻辑,才能呈现给用户,这个时候就很需要一套桌面GUI。最基本的需要是,这套GUI不要太复杂,不能喧宾夺主,同时又希望能够快速出原型,不需要非常复杂的布局设计,然后是尽量做到易于部署发布,不需要考虑太多环境兼容之类的问题。
在项目组写一个自动装版本工具的时候,先有的是核心逻辑,在python上写的,然后选择了pyqt,最核心的理由是它自带一个qt designer,只需要拖拽所见即所得就可以完成界面的布局,不需要写坐标来布局;然后它的控件也足够用,网上教程也不少。
遇到的几个难点:
- 控件事件绑定:其实没什么复杂的,需要找一下而已,看看这次写的源码很快能想起来
- 打包配置:记得使用pyinstall就行,只需要输入入口文件,自动帮你搭好所有相关文件。第一次我打好之后打不开,有报错文件找不到,一直以为要手动添加别的python文件,网上也没人明确指出,折腾了很久才明白
- 部署如何做到环境打包:引用的外部文件用相对路径,然后要跟出来的exe配套
- 自定义控件:没用到太复杂的,只是简单嵌套,然后定制功能,可以网上找找教程或者看看这次源码
- 多线程:主线程和ui现成要分开,不能用python自带的现成,要用qt的
- 跨文件变量访问:坑了我好久,子线程里访问另一个文件的变量可能和主线程里不一样(想在子线程里改变量,然后主线程根据这个变量刷UI),深层原理没懂,也不能子线程里直接刷UI,qt禁用的。解决办法是子线程里注册信号,传参数,然后在主线程里刷新。