使用PyQt5编写可视化窗体程序

概述

最近几天在帮助朋友的一个作业的编写,具体是通过可视化窗体程序去实现一套网络监控系统。

对于我来说其实最重要的是「可视化窗体」这样的流程。原本想操起Java Swing或者学一下Java Fx什么什么的,这样网络方面使用Java实现的话,我更熟悉一些。但由于Mac的各种不兼容(被迫放弃Java。最终发现了pyqt,然后惊为天人。Python居然可以写QT!

好吧,原谅我的无知。主要令我兴奋的是这家伙可以跨平台,而且界面也可以用qt的编辑器一拖一拖的去编写。

总体

环境

首先,我们需要去下载一份QT的IDE。地址:https://download.qt.io/official_releases/qtcreator/

安装便不再撰述啦,值得注意的是较新的几个版本好像都没有Mac版,我下载的4.11.0。

Python安装库

pip install pyqt5
pip install PySide2

使用

编辑UI

Snipaste_2021-04-20_16-09-23.png

首先,我们通过QT的IDE来创建一个界面文件。新建项目——选择QT——选择Qt Designer Form。

接下来直接拖拖拖就行了... 不过记得更改控件对应的对象名称,因为你需要在程序中通过这个名字去对应到这个控件。

载入UI

载入也是相当简单,我们创建一个类,直接在init方法中使用以下代码。

 def __init__(self):
    qFile = QFile("ui/mainwindow.ui")
    qFile.open(QFile.ReadOnly)
    qFile.close()
    self.ui = QUiLoader().load(qFile)
    self.ui.show()

我们通过「QFile」方法将UI文件从硬盘中读取了出来,随后通过「 QUiLoader()」加载器将其加载(转换)为了Python形式的界面对象。之后我们便可以直接通过「show()」方法将其加载出来。

不过如果这样直接执行的话会爆出「QWidget: Must construct a QApplication before a QWidget」的错误,因此我们的启动方法应该改为如下。前者是顺从这个报错,大概是以此证明这是一个QT应用吧~(姑且这样认定),其后「sys.exit()」是当我们的Python程序触发退出时间的时候将我们的QT应用进行销毁。

if __name__ == '__main__':
    app = QApplication(sys.argv)
    m = Main() # 界面类
    sys.exit(app.exec_())

小例子

QTimer定时任务

如果我们的界面需要一个定时执行的代码我们可以通过这样一个类去定义,以定时更新界面上的数据。

    self.timer = QTimer()
    self.timer.timeout.connect(self.timer_handler)

以上代码便定义了一个定时器,其中「self.timer_handler」为具体的方法实现。

在之后我们可以通过下面这条语句进行启动,可以猜到,其中的「1000」是指1000毫秒执行一次。 相同的,如果我们想要停止这样的定时任务,直接使用「self.timer.stop()」就好了。

self.timer.start(1000)
# python