主要记录PyQt的踩坑之路,本文主要介绍利用工具QtDesigner
来完成UI
界面的设技
PS:最新的也适用,差别不大
我们使用pip
来安装
pip install pyqt5 pyqt5-tools
pyqt5-tools
包含了我们以后要使用的几个工具designer
,pyuci
等,同样的,我们也来验证下安装是否成功。在命令行中执行项目的命令
python -c "import PyQt5"
如果没有报错,那就说明安装好了.报错的话删了重装,参考
pip uninstall pyqt5 pyqt5-tools
先找到designer.exe文件(anaconda)
我的designer在 C:\Users\18049\anaconda3\pkgs\qt-5.9.7-vc14h73c81de_0\Library\bin下,由于用的是虚拟环境,这里记得编译的时候选择自己的虚拟环境.(不知道pycharm怎么选择虚拟环境的百度找一下)
$FileDir$
配置好后,就可以从Tools
--> External Tools
启动了
-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
$FileDir$
$FileName$ -o $FileNameWithoutExtension$_rc.py
$FileDir$
生成的代码如下:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(292, 235)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 292, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "hallow world"))
添加主题窗口显示代码:
import sys
from PyQt5.QtWidgets import QApplication , QMainWindow
'''
生成的代码
'''
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
# 定制widget的大小
MainWindow.resize(292, 235)
# 屏幕中间显示窗口
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 292, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
# 设置窗口名称
MainWindow.setWindowTitle(_translate("MainWindow", "hallow world"))
if __name__ == '__main__':
'''
主函数
'''
# 创建app对象
app = QApplication(sys.argv)
mainWindow = QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(mainWindow)
# 显示widget
mainWindow.show()
# 进入事件循环
sys.exit(app.exec_())
首先是导入相应的包,我们用到了QApplication
和QWidget
。需要注意的是,每一个PyQt5
应用程序都必须创建一个QApplication
对象,接下来创建一个widget
,我们没有给它传参数,然后给它设置大小resize
,然后通过show
方法将widget
显示出来,最后进入应用的主循环,循环接收来自窗口系统的事件并将事件dispatch
(分发)到各个widget
中去。退出循环需要调用exit()
方法,sys.exit
方法会在应用退出后进行垃圾回收。