1. 工具
使用Idea 进行pyqt5的开发
2. 环境
python 环境为3.10.1
3. 安装pyqt5环境
pip install pyqt5
由于pyqt designer 跟python 版本关系,3.10以上的使用
pip install pyqt5designer
进行安装,低于3.10.x的使用
pip install pyqt5_tools
进行安装
4. 开发
4.1 手敲ui代码
# -*- coding: utf-8-*-
# 测试QWidget
import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('widget test')
w.show()
sys.exit(app.exec_())
4.2 使用designer 设计Ui,使用pyui工具进行Ui文件到py 文件的转换
配置idea 的第三方工具
配置完成后,打开designer进行ui的设置,然后选中保存好的ui文件,使用pyui进行转换
4.3 信号与槽函数
使用信号与槽编辑器
或者使用编辑信号与槽
4.4. 使用ui转换的py代码
转换后的py文件如下
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'testWidget.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(220, 80, 311, 271))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.groupBox = QtWidgets.QGroupBox(self.verticalLayoutWidget)
self.groupBox.setObjectName("groupBox")
self.pushButton = QtWidgets.QPushButton(self.groupBox)
self.pushButton.setGeometry(QtCore.QRect(80, 60, 75, 23))
self.pushButton.setObjectName("pushButton")
self.toolButton = QtWidgets.QToolButton(self.groupBox)
self.toolButton.setGeometry(QtCore.QRect(80, 130, 101, 16))
self.toolButton.setObjectName("toolButton")
self.meslabel = QtWidgets.QLabel(self.groupBox)
self.meslabel.setGeometry(QtCore.QRect(140, 200, 54, 12))
self.meslabel.setObjectName("meslabel")
self.verticalLayout.addWidget(self.groupBox)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.pushButton.clicked.connect(self.meslabel.hide) # type: ignore
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.groupBox.setTitle(_translate("MainWindow", "GroupBox"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
self.toolButton.setText(_translate("MainWindow", "toolButton"))
self.meslabel.setText(_translate("MainWindow", "show mess"))
启动代码如下
# -*- coding: utf-8-*-
# 测试QWidget
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
import testWidget
if __name__ == '__main__':
app = QApplication(sys.argv)
tstW = testWidget.Ui_MainWindow()
mainWindow = QMainWindow()
# w = QWidget()
# w.resize(250, 150)
# w.move(300, 300)
# w.setWindowTitle('widget test')
tstW.setupUi(mainWindow)
mainWindow.show()
sys.exit(app.exec_())