pyqt5实现qt程序

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、文档

pyqt5文档说明

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值