使用PyQt5快速开发一个桌面应用

环境需求

可以创建一个新的虚拟环境(Python3.7) , requirements.txt 包含以下内容 :

PyQt5
pyqt5-tools
pyinstaller

使用命令
pip install -r requirements.txt 安装环境依赖

UI布局

from PyQt5.QtCore import QStringListModel, QTimer
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import  *
import  json

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.Init_UI()

    def Init_UI(self):
        self.setGeometry(300,300,1280,720)
        self.setWindowTitle('小工具测试')
        self.setWindowIcon(QIcon('assets/icon.png'))

        vbox = QVBoxLayout()
        vbox.addLayout(...)
        vbox.addWidget(...)
        self.setLayout(vbox)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    app.exit(app.exec_())

以上代码描述了一个QT简单Widget的主要结构.
也可以选择使用qt-designer.exe 来辅助画设计UI , 然后利用qt-UIC工具编译为
python代码 。 可参考网上教程.

Layout

描述UI是一个树形结构, 根节点设置一个Layout (本身是一个Widget)
根据界面布局,可以使用不同的 Layout
例如:

  • HBox
  • VBox
  • Form
  • Table

Widget

Layout 可以通过 addWidget 添加叶节点, 就是自带的控件
例如:

  • QPushButton
  • QListView
  • QLabel
  • QPlainTextEdit

也可以通过addStretch添加占位空间, 控制布局结构.
详情可以参考 QT 文档.

https://doc.bccnsoft.com/docs/PyQt5/

逻辑处理

逻辑部分一般就是处理各种UI事件输入, 添加对应的UI响应逻辑.
QT 这个部分抽象为 SignalSlot 机制

Signal

Signal 其实就是一些 控件 自生声明的当发生输入事件时,可以提供通知的机制,
类似Event.Listener机制.
signal 可以通过 connect 函数与 处理该事件的 slot (槽函数) 绑定。

Slot

Slot 就是一些控件的事件响应函数(回调) , 也就是事件处理handler .
一些空间自身也提供的函数可以直接作为槽函数用 。

打包

使用pyinstaller 即可将python代码打包为二进制exe方便发布,根据情景可选择打包为单文件 还是 目录形式 发布 。

使用命令如下:

pyinstaller -F -w .\gui.py