1、安装PyQt5和PyQt5-tools
在Pycharm中设置好Python环境,点击File-Settings-Project-Python Interpreter
设置好后退出,点击窗口下的Terminal,输入
# 直接安装输入pip install pyqt5,如果太慢可以用国内镜像源,若出错多试几次
pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
同样的方法安装PyQt5-tools:
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
2、配置环境
点击File-Settings-Tools-External Tools,点击+号
需要配置三个tools ,分别是 QtDesigner、PyUICS、Pyrcc,其中QtDesigner是qt 设计师,PyUics是把UI界面转换成py文件,Pyrcc是资源系统转换。
配置Qt Designer,如图:
Name: Qt Designer (自定义)
Program: C:\Users\wmm\AppData\Local\Programs\Python\Python39\Lib\site-packages\qt5_applications\Qt\bin\designer.exe (换成自己的路径,可在自己的Python安装目录搜索 desinger.exe,然后把该路径填入即可)
Working directory: 工作目录,填入$FileDir$ 即可。
配置PyUIC,如图:
Program: C:\Users\wmm\AppData\Local\Programs\Python\Python39\python.exe(换成自己的路径,可在自己的Python安装目录搜索python.exe,然后把该路径填入即可)
Arguments: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
Working directory: 工作目录,填入$FileDir$
配置Pyqcc,如图:
Program: C:\Users\wmm\AppData\Local\Programs\Python\Python39\Scripts\pyrcc5.exe
Arguments: $FileName$ -o $FileNameWithoutExtension$_rc.py(换成自己的路径,可在自己的Python安装目录搜索 pyrcc5.exe,然后把该路径填入即可)
Working directory: 工作目录,填入$FileDir$ 即可。
至此,需要配置的变量已完成。
3、测试
1)新建工程
File-> New Project ,如下图:
选择Previously configured interpreter
如果选择New environment using-Virtualenv,注意:一定要勾上红框中的选项,不然会报找不到ModuleNotFoundError: No module named 'PyQt5'
等各种错误
2)打开ui设计窗口
在工程中新建一个py文件(新建工程时会自动创建main.py),进入文件,鼠标右键点击,选择External Tools-QtDesigner,然后以Widget创建一个窗口,然后拖动一个Qlabel, 输入 hello world
设计好界面后点击保存,将其保存在项目文件夹中 ,然后退出。
3)生成可执行py文件
在工程项目中能看到保存好的uitest.ui文件,右键找到External Tools,选PyUIC,生成对应的py文件
4)修改main.py,运行程序,即可以看到我们设计的界面效果
import sys
import uitest # 对应uitest.py
from PyQt5.QtWidgets import QApplication, QMainWindow
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = hello.Ui_Form()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
至此,大功告成!!
4、关于PyQt中主函数app=QApplication(sys.argv)、sys.exit(app.exec_())的作用
1)app.exec_()的作用是运行主循环,必须调用此函数才能开始事件处理,调用该方法进入程序的主循环直到调用exit()结束。主事件循环从窗口系统接收事件,并将其分派给应用程序小部件。如果没有该方法,那么在运行的时候还没有进入程序的主循环就直接结束了,所以运行的时候窗口会闪退。
app.exec_()在退出时会返回状态代码
2)不用sys.exit(app.exec_()),只使用app.exec_(),程序也可以正常运行,但是关闭窗口后进程却不会退出。
sys.exit(n)的作用是退出应用程序并返回n到父进程。
3)QApplication 详细描述
QApplication 类管理图形用户界面应用程序的控制流和主要设置。 可以说 QApplication是Qt的整个后台管理的命脉
它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。它也处理绝大多数系统范围和应用程序范围的设置。
对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication对象,而不论这个应用程序在同一时间内是不是有0、1、2或更多个窗口。
QApplication 对象是可以通过全局变量qApp访问。它的负责的主要范围有:
它使用用户的桌面设置,例如palette()、font()和doubleClickInterval()来初始化应用程序。如果用户改变全局桌面,例如通过一些控制面板,它会对这些属性保持跟踪。
它执行事件处理,也就是说它从低下的窗口系统接收事件并且把它们分派给相关的窗口部件。通过使用sendEvent()和postEvent(),你可以发送你自己的事件到窗口部件。
它分析命令行参数并且根据它们设置内部状态。关于这点的详细情况请参考下面的构造函数文档。
它定义了由QStyle对象封装的应用程序的观感。在运行状态下,可以通过setStyle()来改变。
它指定了应用程序如何分配颜色。详细情况请参考setColorSpec()。
它定义了默认文本编码(请参考setDefaultCodec())并且提供了通过translate()用户可见的本地化字符串。
它提供了一些像desktop()和clipboard()这样的魔术般的对象。
它知道应用程序的窗口。你可以使用widgetAt()来询问在一个确定点上存在哪个窗口部件,得到一个topLevelWidgets()(顶级窗口部件)的列表和通过closeAllWindows()来关闭所有窗口,等等。
它管理应用程序的鼠标光标处理,请参考setOverrideCursor()和setGlobalMouseTracking()。
在X窗口系统上,它提供刷新和同步通讯流的函数,请参考flushX()和syncX()。
它提供复杂的对话管理支持。这使得当用户注销时,它可以让应用程序很好地结束,如果无法终止,撤消关闭进程并且甚至为未来的对话保留整个应用程序的状态。详细情况请参考isSessionRestored()、sessionId()、commitData()和saveState()。
应用程序排演实例包含了一个QApplication通常用法的典型完整的main()。
因为QApplication对象做了如此多的初始化,它必须在所有与用户界面相关的其它类被创建之前被创建。
因为它也处理命令行参数,在应用程序中对argv解释和修改之前创建它通常是一个好主意。(注意,也对于X11,setMainWidget()可以根据-geometry选项来改变主窗口部件。为了保持这个功能,你必须在setMainWidget()和它的任何重载之前设置你的默认。)
QApplication::QApplication ( int & argc, char ** argv )
初始化窗口系统并且使用在argv中的argc个命令行参数构造一个应用程序对象。
全局指针qApp指向这个应用程序对象。应该只有一个应用程序对象被创建。
这个应用程序对象必须在任何绘制设备(包括窗口部件、像素映射、位图等等)之前被构造。
argc和argv是命令行传进去的参数。比如linux里输入一个命令
cp file.c file1.c
那么argc=3 argv就是上面那行字符串数组。
因为图形编程有时也需要从命令行传递参数给程序,所以才会有argc和argv。
(原文链接:https://blog.csdn.net/cuicui_ruirui/article/details/102873528)