文章目录
1、安装
环境:python3.7+pyqt5+windows10
pip3 install sip
pip3 install PyQt5
pip3 install PyQt5-tools
2、qt实现(分为以下两种方式)
2.1 pyqt5纯代码
实现上传文件
import subprocess, os
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QTextEdit, QPushButton
class DropFile(object):
def __init__(self, q_widget):
self.q_widget = q_widget
self.textEdit = QTextEdit(self.q_widget)
self.pushButton = QPushButton(self.q_widget)
self.initUI()
def initUI(self):
self.q_widget.setObjectName("Form")
self.q_widget.resize(416, 48)
self.textEdit.setAcceptDrops(True)
self.textEdit.setGeometry(QtCore.QRect(10, 10, 301, 27))
self.textEdit.setStyleSheet("font-family:微软雅黑;")
self.textEdit.setObjectName("textEdit")
self.textEdit.textChanged.connect(self.editchange)
self.textEdit.setReadOnly(False)
self.pushButton.setGeometry(QtCore.QRect(320, 9, 75, 28))
self.pushButton.setObjectName("pushButton")
self.pushButton.clicked.connect(self.open)
QtCore.QMetaObject.connectSlotsByName(self.q_widget)
self.retranslateUi()
QtCore.QMetaObject.connectSlotsByName(self.q_widget)
def editchange(self):
if 0 == self.textEdit.toPlainText().find('file:///'):
self.textEdit.setText(self.textEdit.toPlainText().replace('file:///', '').replace("/", "\\"))
def open(self):
if os.path.exists(self.textEdit.toPlainText()):
subprocess.Popen("start " + self.textEdit.toPlainText(), shell=True)
self.textEdit.clear()
def retranslateUi(self):
_translate = QtCore.QCoreApplication.translate
self.q_widget.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "打开"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = DropFile(Form)
Form.show()
sys.exit(app.exec_())
2.2 使用qt designer设计界面,pyqt5加载界面操作
1、使用designer设计ui界面
找到designer.exe
找到qt5_applications,在qt5_applications/QT/bin目录下
designer.exe 界面如下
‘’‘
说明:1、左侧是按钮、布局、组件,首先先创建一个窗口,然后可以点击左侧栏进行添加
2、蓝色部分是组件对象(每一个组件就是一个对象),其中button和textEdit是组件的类命
3、红色部分是组件属性,包括:font(字体设置),stylesheet(可添加样式QSS语法)等
’‘’
4、中间蓝色是创建的图形化界面,右键可进行布局等操作
编辑完成后保存就会生成一个.ui文件
2、使用pyqt5加载ui文件
# 导入loadUi模块
from PyQt5.uic import loadUi
# 加载返回一个窗口对象
class AuthUiMain(QWidget):
def __init__(self):
super().__init__()
self.ui = loadUi('./UI/index.ui', self)
# 加载其中的组件
self.button = self.ui.button
# 常规运行
app = QApplication(sys.argv)
w = AuthUiMain()
sys.exit(app.exec())
补充:
将.ui文件转为.py文件
python -m PyQt5.uic.pyuic ***.ui -o ***.py
3、文档
1、按钮绑定事件
btn.clicked.connect(func)
2、文件操作-QFileDialog
# 上传文件
files, _ = QFileDialog.getOpenFileName(self, "Open", "", "*.txt")
# 下载文件
fileName_choose, filetype = QFileDialog.getSaveFileName(self, "文件保存", "/certificate","授权文件 (*.txt);;(*.txt)")
3、消息提醒-QMessageBox
# 警告
QMessageBox.warning(self, '警告', '字段填充不完整')
# 关于
QMessageBox.about(self, "成功", "文件导出成功")
4、设置样式及图标等
palette = QPalette()
pix = QPixmap("./images/back.jpg")
pix = pix.scaled(self.width(), self.height())
palette.setBrush(QPalette.Background, QBrush(pix))
self.setPalette(palette)
# 设置logo
self.setWindowIcon(QIcon('./images/LOGO.png'))
# 设置导入按钮颜色
self.import_btn.setStyleSheet('''QPushButton{background:#f5ffee}''')
self.down_btn.setStyleSheet('''QPushButton{background:#f5ffee}''')
self.report_select.setStyleSheet('QComboBox{background:#f5ffee}')
4、打包
使用pyinstaller进行打包
pip3 install pyinstaller
打包命令
pyinstaller -w -F load_ui_main.py -i favicon.ico -n new --hidden-import PySide2.QtXml
参数 | 说明 |
---|---|
-w | 隐藏命令行窗口 |
-n | 生成的exe重命名 |
-F | 打包成一个独立的exe程序(运行起来会慢很多) |
-i | 为程序添加ico图标 |
- 虽然理论上程序打包很简单,但实际上可能会遇到各种问题,在打包pyqt程序时如果用的是动态导入ui文件,那么就得加上 --hidden-import PySide2.QtXml 并且把ui文件也一同放入exe文件夹内,因为程序并不会打包ui文件;如果程序用到了什么像图标,图片之类的静态文件,也需要都放到exe文件夹下。
可能出现的问题:
修改spec文件
发现某些包不存在,但是环境中有,这时候需要程序用到的包写到hiddenimports里
使用spec文件重新生成exe
pyinstaller -F ***.spec
参考链接:
Pyinstaller打包的正确姿势:https://www.2bboy.com/archives/155.html