1. PyQt5下载安装
- python3环境安装,笔者装的3.6.0,安装时,一定要选择pip,将其安装上。
- 执行
pip3 install sip
,先安装先安装sip - 执行
pip3 install PyQt5=5.10
,因为python3.6对应的PyQt版本是5.10,安装时一定要保证版本一致,否则运行时候会报错。 - 执行
pip3 install pyqt5-tools
,安装pyqt5-tools。 - 具体可参照博客PyQt5安装
2. 配置QtDesigner,PyUIC,Pyqcc
需要配置三样东西,其中QtDesigner用于界面设计,PyUIC用于把ui文件转化成py文件,Pyqcc用于把资源文件qrc转换成py文件。参照博客
3. 实战教程
-
先用QtDesigner设计界面
-
使用 PyUIC 将 hello.ui 文件转换为 hello.py , 转换后代码如下
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'hello.ui'
#
# Created by: PyQt5 UI code generator 5.10
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(619, 163)
self.verticalLayout_2 = QtWidgets.QVBoxLayout(Form)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.splitter = QtWidgets.QSplitter(Form)
self.splitter.setOrientation(QtCore.Qt.Vertical)
self.splitter.setObjectName("splitter")
self.layoutWidget = QtWidgets.QWidget(self.splitter)
self.layoutWidget.setObjectName("layoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.pushButton = QtWidgets.QPushButton(self.layoutWidget)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout.addWidget(self.pushButton)
self.lineEdit = QtWidgets.QLineEdit(self.layoutWidget)
self.lineEdit.setObjectName("lineEdit")
self.horizontalLayout.addWidget(self.lineEdit)
self.verticalLayout.addLayout(self.horizontalLayout)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget)
self.pushButton_2.setObjectName("pushButton_2")
self.horizontalLayout_2.addWidget(self.pushButton_2)
self.lineEdit_2 = QtWidgets.QLineEdit(self.layoutWidget)
self.lineEdit_2.setObjectName("lineEdit_2")
self.horizontalLayout_2.addWidget(self.lineEdit_2)
self.verticalLayout.addLayout(self.horizontalLayout_2)
self.layoutWidget_2 = QtWidgets.QWidget(self.splitter)
self.layoutWidget_2.setObjectName("layoutWidget_2")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.layoutWidget_2)
self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.pushButton_3 = QtWidgets.QPushButton(self.layoutWidget_2)
self.pushButton_3.setObjectName("pushButton_3")
self.horizontalLayout_3.addWidget(self.pushButton_3)
self.progressBar = QtWidgets.QProgressBar(self.layoutWidget_2)
self.progressBar.setProperty("value", 24)
self.progressBar.setObjectName("progressBar")
self.horizontalLayout_3.addWidget(self.progressBar)
self.layoutWidget_3 = QtWidgets.QWidget(self.splitter)
self.layoutWidget_3.setObjectName("layoutWidget_3")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.layoutWidget_3)
self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.pushButton_4 = QtWidgets.QPushButton(self.layoutWidget_3)
self.pushButton_4.setObjectName("pushButton_4")
self.horizontalLayout_4.addWidget(self.pushButton_4)
spacerItem = QtWidgets.QSpacerItem(238, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_4.addItem(spacerItem)
self.verticalLayout_2.addWidget(self.splitter)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "打开影像"))
self.pushButton_2.setText(_translate("Form", "打开RPC"))
self.pushButton_3.setText(_translate("Form", "RUN"))
self.pushButton_4.setText(_translate("Form", "CLSOE"))
- 主函数run.py写法
import sys
from hello import Ui_Form
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QFileDialog
class MyWindow(QWidget,Ui_Form):
def __init__(self):
super(MyWindow,self).__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.openMsg1)
self.pushButton_2.clicked.connect(self.openMsg2)
def openMsg1(self):
file_img,ok = QFileDialog.getOpenFileName(self,"open","D:/VMcentosShare/GF1","TIFF (*.tif *.tiff *.img);;ALL FILES(*)")
self.lineEdit.setText(file_img)
def openMsg2(self):
file_rpc,ok = QFileDialog.getOpenFileName(self,"open","D:/VMcentosShare/GF1","RPC (*.rpb *.rpc *.txt);;ALL FILES(*)")
self.lineEdit_2.setText(file_rpc)
if __name__ == '__main__':
app = QApplication(sys.argv)
myshow = MyWindow()
myshow.show()
sys.exit(app.exec_())
- 运行结果如图