写在前面:
为什么用pyqt?
给自己的程序做一个图形界面会比较好用。而qt是目前比较流行的图形界面库,功能全面、强大。使用工具qt designer
,通过拖拽的方式就可以制作出一个图形界面。
本文参考了下面两篇文章配置pyqt。
【python】PyQt6和pyqt6-tools在PyCharm2021的详细配置方法_特大辉哥的博客-CSDN博客_pyqt6配置
PyQt/PySide6快速入门 - 1 安装,配置,打包成exe - 简书 (jianshu.com)
一、安装注意事项
有两点需要特别注意:
1.安装前先升级pip。升级pip时 一定要在后面加--user,否则出现权限问题,无法安装。然后就出现一个尴尬的情况,你卸载了旧的pip,但是又没安装上新的。
就要借助一些其他东西来安装pip了。比如conda。非常麻烦。
升级pip:
pip install --upgrade pip --user
2.安装pyqt6、pyqt6-tools
pip install PyQt6
pip install pyqt6-tools
然后会报错:
ERROR: ImportError: DLL load failed while importing QtGui
需要卸载再安装pyqt6:
pip uninstall PyQt6
pip install PyQt6
这样就好了。(玄学问题)
下面是一个测试程序,如果正常运行没有报错,出现一个Hello Qt的窗口就安装好了。
代码语言:javascript复制#!/usr/bin/python
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton
def main():
app = QApplication(sys.argv)
w = QWidget()
w.setWindowTitle('Simple')
btn = QPushButton('Hello PyQt6!', w)
btn.move(50, 50)
w.show()
sys.exit(app.exec())
if __name__ == '__main__':
main()
二、Pycharm配置
2.1 QtDesigner: 图形化拖拽来设计GUI
打开Pycharm,打开设置界面(快捷键Ctrl Atl S),在工具选项里找到外部工具:
说明:
名称(Name),组(Group) :就是起个名字。我这里名称填了QtDesigner
,组填了PyQt6
工具设置: 程序:填Python目录下的Scriptspyqt6-tools.exe 实参:填designer
工作目录:FileDir 这个表示你在哪个文件夹打开的designer,生成的ui文件就在哪个文件夹。
(实际上“外部工具”就是一个快捷键,等效于在Python目录下的Scripts
文件夹下启动命令行,执行pyqt6-tools.exe designer
。但是方便很多)
2.2 PyUiC: designer生成的UI文件转化为py文件
和2.1 类似
程序:填Python目录下的Scriptspyuic6.exe 实参:注意,这里要填FileName -o FileNameWithoutExtension.py 工作目录:FileDir ,生成的py文件和ui文件在同一目录。
2.3 使用QtDesigner
我们右键文件夹,然后选择pyQt6
-->QtDesigner
就会进入设计界面,我们就可以在这里用拖拽的方式设置界面。
随便拖拽了两个Label,然后ctrl s
保存。文件名这里我设置为hello.ui
。
文件夹下就多了hello.ui
文件,也就是我们的界面。
2.4 使用Pyuic
Pyuic可以将.ui文件变成相应的python代码,使用如下(右键.ui文件,选择PyQt6-->PyUic):
然后就会得到同名的.py文件(hello.py
)。里面定义了一个类Ui_MainWindow
,也就是我们的窗口。
在hello.py
最下面,我们添加如下语句,将窗口启动起来:
if __name__ == '__main__':
import sys
from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtWidgets import QApplication, QMainWindow
app = QApplication(sys.argv)
myw = QMainWindow()
myWin = Ui_MainWindow().setupUi(myw)
myw.show()
sys.exit(app.exec())
运行hello.py
看到这个窗口,pyqt的配置就算完成了。