PyQt+QtDesigner App Dev Workflow | PyQt + QtDesigner 小程序制作流程

0. 起因

毕设要做一个发送GCode的小程序,需要GUI。所以接触了一下PyQt.

1. 安装

  1. 需要Qt,在Qt官网下载即可。想下载的话要回答一些问题,我选的in-house deployment,接受LGPL v3之类。然后选择一个完整版的Qt,800Mb左右。
  2. Python环境,我就用的Anaconda,一个集成的Python环境。要不然原生Python装依赖库比较麻烦。我选择的Python2.7,主要因为很多行业软件还没升到3,比如Rhino, Houdini.
  3. PyQt5,用Anaconda装比较方便。用pip的话似乎只有py3.5版本的?
  4. pyinstaller,发布为exe时用。直接
    pip install pyinstaller

2. 界面制作

制作GUI需要Qt Designer。类比一下,Qt Creator相当于Visual Studio,是一个IDE,在其中可以写代码debug。而Qt Designer可能比较像Axure,是一个界面原型制作工具。只是用来加控件,其中的逻辑还需要编程处理。

非常的直观,左边的各种控件拖进来就可以了,控件的信息在右下配置。

需要注意几点:

  1. 控件的名称最好改成有意义的,方便代码阅读,之后编写逻辑时会用控件名调用。
  2. 组织控件,比如用Layout之类。这样控件的位置就比较有逻辑而不是随意摆放。

有一些控件常用控件比如
Push Button: 按钮
Combo Box: 下拉菜单
Line Edit:单行字符框
等等

还有些很有意思的,
Dial:一个转盘
Progress Bar:进度条
OpenGL Widget:可以写OpenGl哦!

设计完GUI以后,保存成一个*.ui的文件。打开里面大概长这样:

是一个xml格式的文件,定义了每个控件的名字,层级关系,位置,属性等等。这样比较好,MVC吧View隔离出来了。

得到的这个.ui要用pyuic转成python定义。因为python不能解析这个xml,还是必须一行一行通过代码加控件。所以要预先用pyuic转成.py文件。

命令行中在所在目录下直接用

pyuic5 myui.ui -o myui.py

生成这个GUI的py文件,在程序逻辑中再调用。

3. 逻辑编写

这里就主要是基本功了,没那么多奇淫技巧。但也还有几点可以注意:

  1. Qt在对象通信上有一个特殊的signal/slot机制。一个对象有个signal,另一个对象有一个方法(作为slot),我们可以把它们绑定起来。当第一个signal触发时通知slot,即执行第二个对象的方法。这在程序中还是挺方便的。但控件事件的绑定有一点特别的:
    其它语言里一般是

    button.onClick += foo() 

    ,但在qt里是

    button.clicked.connect(foo) 
  2. 控件的方法直接查阅documentation就好了,非常奇怪pyqt没有单独的文档,都是指向C++的。所以其实直接看C++的文档呗,比如这里.
  3. 我的程序里涉及串口,用的pyserial库。想要接收串口的数据就有一点麻烦。在Arduino/Processing里都有一个SerialEvent的,直接override就能作为serialListener。PyQt里想要这么做就得再建一个线程了,线程了做一个timer,定时执行一个方法,这就相当于Arduino里的SerialEvent了。具体实现参考了StackOverflow上的这个帖子Using a QThread in PyQT for serial communication

4. 发布

在本机上直接用python就可以运行,但是如果要部署到其它环境,就要发布一下,比如转成exe。
有很多工具,这里用的pyinstaller

之后发布的时候在所在文件夹内用命令行

pyinstaller myapp.py

就自动打包了。
只是Qt这几个库真是太占地方了。随随便便文件夹就几十兆了。

5. 总结

用PyQt + QtDesigner做GUI小程序有这么几个优点:

  1. 可以用python各种的库,加上语法精悍,开发起来非常快。
  2. GUI设计简单,不用写很多代码。在QtDesigner中所见即所得。

所以在工具链开发中常用这种方法吧。

当然主要的缺点就是:文件太大了,Qt的锅。

最后的代码就不贴了,在Github上:https://github.com/maajor/MSandPrinter/tree/master/GCodeSender

 

参考资料:

PyQt5 Reference Guide

How to Install PyQt5 and Build Your First GUI in Python 3.4

PyInstaller Manual

发表评论

电子邮件地址不会被公开。 必填项已用*标注