pip 安装
# pip主控件安装
pip install pyqt5
# pip安装设计工具
pip install pyqt5-tools
# 网络浏览器
pip install PyQtWebEngine
apt-get 安装
# 安装主控件
sudo apt-get install python3-pyqt5
# 安装设计工具
sudo apt-get install qtcreator pyqt5-dev-tools
sudo apt-get install qttools5-dev-tools
# 多媒体支持,使用的是ffmepg
sudo apt install python3-pyqt5.qtmultimedia
# 网络浏览器
sudo apt-get install python3-pyqt5.qtwebengine
- PyQt5
- PySide2 (Qt for Python)
- kivy
- tkinter
- wxPython
PyQt是Qt框架的Python实现. PyQt提供了一个设计良好的窗口控件集合, 每一个PyQt控件都有其对应的Qt控件.
PyQt5使用GPL协议, 商业使用需要$550每年的许可. 如果想避免商业上的麻烦, 可以使用兼容的PySide2, 其封装与PyQt5一样, 但使用LGPL协议.
为了同时兼容PyQt4, PyQt5, PySide2, PySide, 也有像 Qt.py, QtPy这样的打包好的兼容库.
SIP是一个自动为C和C++库生成Python扩展模块的工具。为了方便开发PyQt,SIP于1998被“Riverbank Computing”公司创造出来。不过,SIP不专用于PyQt,而是适用于所有的C和C++库。
使用SIP时,程序员首先要编写一个特殊的".sip"文件,使用类似于C++的语法在其中描述扩展模块所提供的类型与函数。然后用SIP将这个文件转化为C++代码。最终编译,与C、C++库链接后就成为Python扩展模块。".sip"文件类似于C、C++的头文件。根据需要,需要程序员用SIP定义的语法添加一些C++代码中没有的信息。因为SIP不支持完整的C++语法,所以不能直接使用C++的头文件作为".sip"文件。
PyQt5的优势是其有pyqtdeploy工具, 可以将PyQt5打包到Windows, Linux, macOS, Android, IOS系统上.
硬要说的话, kivy其实是现在最好的GUI开发, 其使用MIT, 原生支持所有可视化系统. 就是没有可视化的设计器.
PyQt包含了大约440个类型、超过6000个的函数和方法
- QtCore:模块主要包含了一些非GUI的基础功能,包含事件循环与Qt的信号机制。此外,还包含了跨平台的Unicode、时间、文件和目录、各种数据类型、流、网址、MIME类型、线程或进程。
- QtGui模块包含了大多数的GUI类型。包含按钮、窗体、状态栏、工具栏、滚动条、位图、颜色、字体等常见控件,还包含了基于MVC设计模式的列表、表格、树型控件。同时还提供了一个能够容纳成千上万个元素的画布控件,其中可以放置各种控件和图形。此外,QtGui还支持界面动画与界面状态机编程。
- QtNetwork模块可以用于编写非阻塞式的UDP、TCP程序。还包含了DNS、HTTP与FTP的客户端。
- QtOpenGL模块允许Qt程序使用OpenGL渲染3D图形,而且不必大量更改代码。
- QtSql模块支持多种SQL数据库。包括sqlite、ODBC、MySQL、PostgreSQL、Oracle。还提供了一个基于MVC模式的数据模型,与QtGui的的表格控件配合使用。
- QtXml包含一个XML解释器,同时支持SAX和DOM两种编程方式。
- QtSvg模块提供显示的SVG文件的类。可缩放矢量图形(SVG)是一种用于描述二维图形和图形应用程序的XML语言。
- PyQt4.QtWebkit与PyQt4.QtScript, 两个子模块支持WebKit与EMCAScript脚本语言. 最新的PyQt5.QtWebEngineWidgets使用Chromium内核更好的支持网页浏览.
- PyQt4.Phonon, PyQt5.QtMultimedia子模块支持高级的多媒体编程。包含音频播放器、视频播放器与声效处理。
- uic子模块能够将Qt的窗体文件转换为Python代码,能够即时读入窗体文件并且显示出来。它依赖于QtXml模块。“QScintilla”子模块包含一个基于Scintilla的文本编辑器控件,Eric IDE使用它作为代码编辑器。“QtMultimedia”提供了底层的多媒体支持,现在多数开发者改用Phonon或QtMultimedia模块。
PyQt5.9 后不在提供常用的Qt工具, 如 Qt Designer (图形化ui设计器), Qt Liguist (国际化翻译工具), QML Plugin, QML Scene, QML Test Runner等.
可以通过pip install pydt5-tools来安装, 也可以通过sudo apt-get 来安装, 还有就是通过软件商店snap之类的直接装了.
在定义窗口之前, 必须要先有QApplication对象. 每一个PyQt5程序都需要一个QApplication对象, QApplication类包含在QtWidgets模块中. 一般让其接受sys.argv, 即传入控制台参数. 定义窗口, 一般会使用设计好的ui, 通过继承就可以使用.
下面这个分 1. 导入依赖 -> 2. 创建QApplication -> 3. 在应用上定义窗口 -> 4. 显示窗口 -> 5. 应用执行, 退出时回收
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
app = QApplication(sys.argv)
win = QWidget()
win.setGeometry(150, 100, 400, 300)
btn = QPushButton(parent=win)
btn.setGeometry(200, 150, 20, 10)
btn.setText("按钮")
win.show()
sys.exit(app.exec())
使用定义好的ui, 如果使用Qt Designer定义, 在用pyuic5转换而来的, 所有样式都在类的setupUi(self)中
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from firstWindow import Ui_MainWindow
class firstWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None): # 无父窗口 parent=None, 表明这是一个主窗口
super().__init__(parent=parent)
self.setupUi(self)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = firstWindow()
win.show()
sys.exit(app.exec())
完成开发后, 可以使用Pyinstaller进行打包
pip install PyInstaller
常用的选项有
-F, -onefile, 打包成一个执行文件
-D, -onedir, 常见一个目录, 包含执行文件, 但会依赖很多文件(默认选项)
-c, -console, -nowindowed, 使用控制台, 无窗口(默认)
-w, -windowed, -noconsole, 使用窗口, 无控制台
注意打包后在项目中如果有使用相对路径的, 其路径会根据系统的不同而定位到不同的地方, 这样就不能使用__file__这样的定位方式, 而应该使用sys.argv[0]来定位执行的文件所在.