肝魂一晚上总结:全网最全最细手把手教你pyqt5安装与使用☀️《❤️记得收藏❤️》(代码片段)

苏州程序大白 苏州程序大白     2022-12-29     184

关键词:

【肝魂一晚上总结:全网最全最细】手把手教你PyQt5安装与使用☀️《❤️记得收藏❤️》

🏳️‍🌈目录

🏳️‍🌈开讲啦!!!!🏳️‍🌈

⌛前言

最近偶尔会写一些小工具提升项目组的效率,由于与物理设备交互的中间模块是基于 Python 的,用 Java 难以做到与之通信,为了方便大家日常使用,所以盯上了 Python GUI 工具,试了几个 GUI 框架,最终还是看上了 PyQt5 这个使用较多,文档相对较全的工具~

PyQt5 是以 QT 库为基础,而 QT 库是一个 C++ 库和开发工具,包括图形用户界面、网络、线程、正则表达式、SQL 数据库、SVG、OpenGL、XML、用户和应用程序设置、定位和定位服务、短距离通信( NFC 和蓝牙)、网页浏览、3D 动画、图表、3D 数据可视化以及与应用程序商店的接口。PyQt5 将超过 1000 个这些类实现为一组 Python 模块。

简而言之,PyQt5 就是一个类似于 Java Swing 的 GUI 工具,其中已经内置了较多的高级模块,而且使用 PyQt Desinger 这种工具,可以做到图形化绘制界面,并再次转换成 py 脚本文件。

Py Qt5官网

⏳安装

此处略去 Python3 的安装,使用 pip 工具打开 CMD 进行安装:

pip install pyqt5

pip install pyqt5-tools

其中第一个命令是安装 PyQt5 的核心内容,下面的 pyqt5-tools 则是安装 QtDesigner 和 PyUIC 等强大的配套工具。

当然,为了最后打包为 exe 工具,还需要安装 pyinstaller 模块:

pip install pyinstaller

上面其实就已经安装好了依赖库,接下来我们在 PyCharm 里面配置一下其中的工具,便于快速打开。

⌚配置

这里主要是配置两个工具,一个是绘图工具,直接以 HTML 形式绘制工具的界面 UI,另外一个是将 HTML 界面一键转换成 py 文件的工具。

打开 Pycharm,点击 File–>Setting–>Tools–>External Tools

右边部分本来是空白,点击“+”号,进行如下设置:

Program:填写 PyQtDesigner 安装的路径,也就是安装的 designer.exe 所在的路径,不同版本存储的路径可能不一样,得自己去 Python 的安装路径下面找到。

例如:我安装后的路径在 D:\\Python39\\Lib\\site-packages\\qt5_applications\\Qt\\bin\\designer.exe(看自己的选择)

Working directory 就填 $FileDir$,比较方便的也可以点击右侧 Insert Macro…,然后找到 $FileDir$

第二个工具是 PyUIC,就是将绘制的界面 UI 转换成 py 文件的工具,还是 File-->Setting-->Tools-->External Tools,打开后添加工具:

Program:是Python的安装路径

Arguments:填写如下:

-m PyQt5.uic.pyuic  $FileName$ -o $FileNameWithoutExtension$.py

Working directory:$FileDir$

到此为止,基本设置就已经完成了,我们可以开始简单的测试一下。

⏰使用

点击 PyCharm 导航栏上的 Tools -> External Tools 打开上面配置的 QtDesigner
会自动打开绘制工具:

我们选择默认的,点击 OK,就得到一个初始的界面


其中:

  • 左侧即是列出的所有元素,包括表格、输入框、标签、复选框、下拉框等等

  • 中间是绘图界面,可以自己移动元素

  • 右侧上面是每个元素的对象信息

  • 右侧中间是选中元素的属性,可以修改大小、默认值、字体、样式、鼠标悬停策略等等信息

  • 右侧下面是高级属性,也就是 PyQt5 的信号槽,可以完成多线程操作

我们绘制一个简单的表单如下:

可以点击上面导航栏中的预览进行页面预览:

点击保存为 *.ui 文件,使用 PyCharm 打开,使用 PyUIC 工具将其转换成 py 文件:

然后就会在当前目录下生成一个默认的同名 Py 文件:
要让 py 文件运行起来,我们需要添加一个 main 函数作为启动入口,在刚才生成的 py 文件末尾加入以下代码并引入相应的依赖即可:

if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = Ui_Dialog()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

这时候我们点击运行 py 文件,就可以打开这个界面了!

🌡️入门

现在我们用上面的表单做这么一件事情,点击确定,弹窗提示“添加成功”,点击“重置”,清空表单中的所有内容,所以我们要在 py 文件中添加动态操作,整个逻辑比较简单,就是在点击“确定”按钮时,获取到上面表单的填写内容,在后台打印,并在前台弹窗添加成功,而点击“重置”时,清空表单中的所有内容。

首先我们给确定按钮添加绑定事件:

self.pushButton.clicked.connect(lambda: self.submit_form())

然后添加绑定事件的详情:

 def submit_form(self):
        input_name = self.lineEdit.text()
        input_username = self.lineEdit_2.text()
        input_password = self.lineEdit_3.text()
        input_sex = self.comboBox.currentText()
        input_remark = self.textEdit.toPlainText()
        print(input_name)
        print(input_username)
        print(input_password)
        print(input_sex)
        print(input_remark)
        reply = QMessageBox.information(MainWindow, '成功', '提交成功', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
        if reply == QMessageBox.Yes:
            print('ok')
        else:
            print('cancel')

那么其中的逻辑部分就完成了!至于重置功能,可以自己试一下~

以下是所有代码:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# 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.
import sys

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(463, 391)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(70, 40, 72, 15))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Dialog)
        self.label_2.setGeometry(QtCore.QRect(70, 80, 72, 15))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Dialog)
        self.label_3.setGeometry(QtCore.QRect(70, 120, 72, 15))
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(Dialog)
        self.label_4.setGeometry(QtCore.QRect(70, 160, 72, 15))
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(Dialog)
        self.label_5.setGeometry(QtCore.QRect(70, 200, 72, 15))
        self.label_5.setObjectName("label_5")
        self.lineEdit = QtWidgets.QLineEdit(Dialog)
        self.lineEdit.setGeometry(QtCore.QRect(120, 80, 251, 21))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_2.setGeometry(QtCore.QRect(120, 120, 251, 21))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.lineEdit_3 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_3.setGeometry(QtCore.QRect(120, 40, 251, 21))
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.textEdit = QtWidgets.QTextEdit(Dialog)
        self.textEdit.setGeometry(QtCore.QRect(120, 190, 251, 87))
        self.textEdit.setObjectName("textEdit")
        self.comboBox = QtWidgets.QComboBox(Dialog)
        self.comboBox.setGeometry(QtCore.QRect(120, 160, 87, 22))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(80, 320, 61, 28))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(lambda: self.submit_form())
        self.pushButton_2 = QtWidgets.QPushButton(Dialog)
        self.pushButton_2.setGeometry(QtCore.QRect(180, 320, 61, 28))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(Dialog)
        self.pushButton_3.setGeometry(QtCore.QRect(280, 320, 61, 28))
        self.pushButton_3.setObjectName("pushButton_3")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.label.setText(_translate("Dialog", "用户:"))
        self.label_2.setText(_translate("Dialog", "账号:"))
        self.label_3.setText(_translate("Dialog", "密码:"))
        self.label_4.setText(_translate("Dialog", "性别:"))
        self.label_5.setText(_translate("Dialog", "备注:"))
        self.comboBox.setItemText(0, _translate("Dialog", "男"))
        self.comboBox.setItemText(1, _translate("Dialog", "女"))
        self.pushButton.setText(_translate("Dialog", "确定"))
        self.pushButton_2.setText(_translate("Dialog", "重置"))
        self.pushButton_3.setText(_translate("Dialog", "取消"))

    def submit_form(self):
        input_name = self.lineEdit.text()
        input_username = self.lineEdit_2.text()
        input_password = self.lineEdit_3.text()
        input_sex = self.comboBox.currentText()
        input_remark = self.textEdit.toPlainText()
        print(input_name)
        print(input_username)
        print(input_password)
        print(input_sex)
        print(input_remark)
        reply = QMessageBox.information(MainWindow, '成功', '提交成功', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
        if reply == QMessageBox.Yes:
            print('ok')
        else:
            print('cancel')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = Ui_Dialog()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

运行结果如下:

🏳️‍🌈关注苏州程序大白,持续更新技术分享。谢谢大家支持🏳️‍🌈

肝魂一晚上总结:全网只有我手把手教python检测抖音关注账号是否封号☀️《❤️记得收藏❤️》(代码片段)

【肝魂一晚上总结:全网只有我手把手教】Python检测抖音关注账号是否封号☀️《❤️记得收藏❤️》🏳️‍🌈目录🏳️‍🌈开讲啦!!!!🏳️‍🌈🏳️‍🌈关注苏州程... 查看详情

手把手教你学区块链fabric介绍及其环境搭建|⚠多图警告⚠全网最细⚠(代码片段)

目录前言1.fabric介绍1.1fabric和以太坊的区别1.2身份管理介绍1.3账本:每个节点中都有1.4交易管理介绍1.5节点介绍1.6通道介绍--channel2.fabric环境搭建2.1安装虚拟机2.2安装必要配置2.2.1换源2.2.2安装vim2.2.3安装python2.7以及python-pip22.2.... 查看详情

肝帝一周总结:全网最全最细☀️mysql索引数据结构详解与索引优化☀️《❤️记得收藏❤️》(代码片段)

【肝帝一周总结:全网最全最细】☀️Mysql索引数据结构详解与索引优化☀️《❤️记得收藏❤️》目录🏳️‍🌈开讲啦!!!!🏳️‍🌈🏳️‍🌈1、索引🚣2、索引数据结构... 查看详情

两万字实战:手把手教你linux7安装oracle19crac,看完不会我来打你!❤️全网最细⭐️建议收藏❤️(代码片段)

作者简介作者:LuciferLiu,中国DBA联盟(ACDU)成员。目前主要从事OracleDBA工作,曾从事Oracle数据库开发工作,主要服务于生产制造,汽车金融等行业。现拥有OracleOCP,OceanBaseOBCA认证,擅长Oracle数据库运维... 查看详情

两万字实战:手把手教你linux7安装oracle19crac,看完不会我来打你!❤️全网最细⭐️建议收藏❤️(代码片段)

作者简介作者:LuciferLiu,中国DBA联盟(ACDU)成员。目前主要从事OracleDBA工作,曾从事Oracle数据库开发工作,主要服务于生产制造,汽车金融等行业。现拥有OracleOCP,OceanBaseOBCA认证,擅长Oracle数据库运维... 查看详情

手把手教你virtualbox安装centos,全网最全教程

VirtualBox安装Centos全流程1.VirtualBox下载及安装VirtualBox镜像下载VirtualBox下载链接:http://download.virtualbox.org/virtualbox在该链接中有VirtualBox各个历史版本的下载链接,本文下载的是VirutalBox-6.1.20,需要下载VirtualBox-6.1.20-143896-Win.exe... 查看详情

肝帝一周总结:全网最全最细十万字python教程,学不会找我!教到你会为止!!内容超多,建议收藏慢慢看!(代码片段)

文章目录推荐:个人推荐学习系列,推荐的一定是好的!0、源码下载地址一、内容过多,前言一定要看二、python入门三、python缩进四、Python注释1.单行注释2.多行注释五、Python变量1.变量定义理解2.变量名命名3.分... 查看详情

忙里偷闲一下午总结:全网最全最细linux实时监测cpu温度,拿来即用版本,亲测无异常,建议收藏(代码片段)

文章目录前言项目需求需求具体实现1lm_sensors工具安装2每行脚本具体说明3终极代码实现(放大招)前言各位小伙伴好久不见,最近工作和生活上琐事比较多,所以一直没更文,今天忙里偷闲,跟各位更新一篇拿来即... 查看详情

万字长文!全网最全最细mysqlsql语句大全(建议收藏)

关注我,每天分享软件测试技术干货、面试经验,想要领取测试资料、进入软件测试学习交流群的可以直接加群644956177~~这篇文章主要向大家介绍MySQLsql语句大全,主要内容包括基础应用、实用技巧、原理机制等方面,... 查看详情

2022年最流行的自动化测试工具有哪些?全网最全最细都在这里了

...测试领域,自动化工具肯定占据了核心的位置。本文总结了常用的测试自动化工具和框架,这些工具和框架有助于更好地定位自己,以跟上软件测试的发展趋势。二、2022年自动化测试工具( 查看详情

全网最全最细青龙面板搭配ninja+依赖+ninja配置的超细讲解教程!!!(代码片段)

Title前言1.连接finalshell或者xshell2.停止容器(把以下代码复制粘贴进去)3.删除容器(把以下代码复制粘贴进去)4.安装安装docker-compose(把以下代码复制粘贴进去)5.创建docker-compose.yml文件6.如果使用的xshell的请... 查看详情

❤万字长文js全网最细笔记2️⃣(全网最强,建议收藏)❤(代码片段)

...七夕节鸽我只为偷偷在家准备秋招简历?我一怒之下手把手教她写满分简历秋招提前批专场面试官:没了解过索引的原则,回去等通知!基于Python的Django框架 查看详情

『开发技巧』全网最详尽手把手教你在ubuntu安装搜狗输入法(代码片段)

 最近在使用Ubuntu进行开发,用惯了搜狗输入法,所以尝试在Ubuntu上安装使用。发现网络上的教程都不够完整,所以把自己探索安装完整过程记录下来。 0x01:安装fcitx 命令行执行sudoapt-getinstallfcitxfcitx-table-wbpy 0x... 查看详情

2022年最流行的自动化测试工具有哪些?全网最全最细都在这里了

...测试领域,自动化工具肯定占据了核心的位置。本文总结了常用的测试自动化工具和框架,这些工具和框架有助于更好地定位自己,以跟上软件测试的发展趋势。二、2022年自动化测试工具(框架)分类统计1.Se... 查看详情

建议收藏万字长文,教你发布鸿蒙(harmonyos)组件到maven中央仓库,全网最全教程!(代码片段)

        目录1.使用组件的3种方式(1)引用同工程中的HarmonyOS组件(以调试为目的)(2)引用本地的HarmonyOS组件(3)引用Maven中央仓库中的HarmonyOS组件2.组件可以发布到哪里(1)没有自... 查看详情

全网最全linux命令总结!!(史上最全,建议收藏)(代码片段)

...收获。今天,给小伙伴们带来一篇史上最全Linux命令总结的文章,命令有点多,建议小伙伴 查看详情

全网最全linux命令总结!!(史上最全,建议收藏)(代码片段)

...收获。今天,给小伙伴们带来一篇史上最全Linux命令总结的文章,命令有点多,建议小伙伴 查看详情

全网最新最细最全最牛的jmeter接口测试,性能测试,没有之一,如有雷同纯属抄袭。

目录 1、接口简介2、接口测试简介3、环境搭建4、RESTful风格 5、Json说明6、Jmeter简介7、Jmeter环境搭建8、Jmeter使用8.1Jmeter发GET请求8.2线程组8.2.1 并发执行8.2.2 顺序执行8.2.3 线程组-Ramp-UpPeriod(insenconds)8.2.4 线程组-循环次数8.2.5 ... 查看详情