python之pyQt5实例:二维码生成与读取

目录

1、显示逻辑

2、业务逻辑


二维码的产生历史可以追溯到20世纪80年代。当时,日本Denso Wave公司为了追踪汽车零部件的运输和销售情况,开发了一种能够存储大量信息的条形码,这就是二维码的前身。到了20世纪90年代,随着手机和照相机的普及,人们开始研究如何将二维码应用到手机和相机上,以实现更快速、更便捷的数据传输和识别。

QR码(也就是我们常说的二维码)可存储 7000 多个字符,由相机等设备读取,并从像素图像中解析出包含的信息,读取速度比其他条码快得多。

1、显示逻辑

# -*- coding: utf-8 -*-
​
# Form implementation generated from reading ui file 'qr.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# 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(703, 409)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.centralwidget)self.horizontalLayout_3.setObjectName("horizontalLayout_3")self.verticalLayout = QtWidgets.QVBoxLayout()self.verticalLayout.setObjectName("verticalLayout")self.horizontalLayout = QtWidgets.QHBoxLayout()self.horizontalLayout.setObjectName("horizontalLayout")self.label = QtWidgets.QLabel(self.centralwidget)self.label.setObjectName("label")self.horizontalLayout.addWidget(self.label)self.textEdit = QtWidgets.QTextEdit(self.centralwidget)self.textEdit.setMarkdown("")self.textEdit.setObjectName("textEdit")self.horizontalLayout.addWidget(self.textEdit)self.verticalLayout.addLayout(self.horizontalLayout)self.pushButton = QtWidgets.QPushButton(self.centralwidget)self.pushButton.setObjectName("pushButton")self.verticalLayout.addWidget(self.pushButton)self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)self.pushButton_2.setObjectName("pushButton_2")self.verticalLayout.addWidget(self.pushButton_2)self.horizontalLayout_2 = QtWidgets.QHBoxLayout()self.horizontalLayout_2.setObjectName("horizontalLayout_2")self.label_3 = QtWidgets.QLabel(self.centralwidget)self.label_3.setObjectName("label_3")self.horizontalLayout_2.addWidget(self.label_3)self.textEdit_2 = QtWidgets.QTextEdit(self.centralwidget)self.textEdit_2.setObjectName("textEdit_2")self.horizontalLayout_2.addWidget(self.textEdit_2)self.verticalLayout.addLayout(self.horizontalLayout_2)self.horizontalLayout_3.addLayout(self.verticalLayout)self.label_2 = QtWidgets.QLabel(self.centralwidget)self.label_2.setLayoutDirection(QtCore.Qt.LeftToRight)self.label_2.setMidLineWidth(0)self.label_2.setObjectName("label_2")self.horizontalLayout_3.addWidget(self.label_2)self.horizontalLayout_3.setStretch(0, 1)self.horizontalLayout_3.setStretch(1, 1)MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 703, 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)QtCore.QMetaObject.connectSlotsByName(MainWindow)
​def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.label.setText(_translate("MainWindow", "写入数据"))self.textEdit.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))self.pushButton.setText(_translate("MainWindow", "生成二维码"))self.pushButton_2.setText(_translate("MainWindow", "读取二维码"))self.label_3.setText(_translate("MainWindow", "读取数据"))self.label_2.setText(_translate("MainWindow", "QR"))
​

2、业务逻辑

import sys
import qrcode
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from PyQt5.QtGui import QPixmap, QImage
from qr import Ui_MainWindow
import cv2
import numpy as np
class Ui_logo_ui(QMainWindow):def __init__(self):super().__init__()self.ui = Ui_MainWindow()self.ui.setupUi(self)self.setWindowTitle("二维码生成与读取")
​self.img = []
​self.data = ""
​self.ui.pushButton.clicked.connect(self.generateqrcode)self.ui.pushButton_2.clicked.connect(self.readqrcode)def generateqrcode(self):self.data = self.ui.textEdit.toPlainText()img= qrcode.make(data=self.data)img.save('qrcode.png')self.img=cv2.imread('qrcode.png')self.show_cv_img(self.img, self.ui.label_2)
​def readqrcode(self):det = cv2.QRCodeDetector()val, pts, st_code = det.detectAndDecode(self.img)self.ui.textEdit_2.setPlainText(val)def show_cv_img(self, img, label):shrink = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)QtImg = QImage(shrink.data,shrink.shape[1],shrink.shape[0],shrink.shape[1] * 3,QImage.Format_RGB888)jpg_out = QPixmap(QtImg).scaled(label.width(), label.height())label.setPixmap(jpg_out)
​# 添加一个退出的提示事件def closeEvent(self, event):"""我们创建了一个消息框,上面有俩按钮:Yes和No.第一个字符串显示在消息框的标题栏,第二个字符串显示在对话框,第三个参数是消息框的俩按钮,最后一个参数是默认按钮,这个按钮是默认选中的。返回值在变量reply里。"""
​reply = QMessageBox.question(self, 'Message', "Are you sure to quit?", QMessageBox.Yes | QMessageBox.No,QMessageBox.No)# 判断返回值,如果点击的是Yes按钮,我们就关闭组件和应用,否则就忽略关闭事件if reply == QMessageBox.Yes:cv2.destroyAllWindows()event.accept()else:event.ignore()
​
​
if __name__ == "__main__":app = QApplication(sys.argv)mainWindow = Ui_logo_ui()mainWindow.show()sys.exit(app.exec_())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/232368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探索Qt 6.3:全面了解新特性及应用技巧

学习目标&#xff1a; 帮助读者深入了解Qt 6.3的新特性&#xff0c;并提供相关应用技巧&#xff0c;以帮助他们更好地应用Qt 6.3进行开发 学习内容&#xff1a; Qt 6.3的新特性概述&#xff1a;介绍Qt 6.3相对于之前版本的改进和新增的功能&#xff0c;如模块的增减、性能优化…

WarAgent使用多智能体理解人类历史和预防未来国际冲突

我们能否避免历史十字路口上的战争&#xff1f;这个问题已经被个人、学者、政策制定者和组织在人类历史中追寻了很长时间。在这项研究中&#xff0c;我们尝试根据人工智能&#xff08;AI&#xff09;和大型语言模型&#xff08;LLM&#xff09;的最新进展来回答这个问题。 本文…

【C语言】自定义类型:结构体深入解析(一)

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 ✏️真正相信奇迹的家伙&#xff0c;本身和奇迹一样了不起啊&#xff01; 欢迎大家关注&#x1f50d;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;>希望看完我的文章对你有小小的帮助&am…

微博被封禁如何解决

1.电脑搜索互联网信息投诉平台&#xff0c;点击我要投诉 2.找到互联网企业&#xff0c;选择新浪微博 3.然后填写个人信息&#xff0c;这里正常填写就行 4.填写信息 5.截图 6.成功

响应式布局2:手写响应式导航栏(BootStrap实现以及原生实现)

1.响应式导航栏介绍 响应式导航栏是一种在不同设备和屏幕尺寸下自适应布局和显示的导航栏。它可以根据用户所使用的设备&#xff08;如桌面电脑、平板电脑或手机&#xff09;自动调整其外观和交互方式&#xff0c;以提供更好的用户体验。 pc端&#xff1a; 手机端&#xff1a…

嵌入式开发行业会不会也变成java行业?

今日话题&#xff0c;嵌入式开发行业会不会也变成java行业&#xff1f;关于嵌入式行业的未来&#xff0c;与一些人的担忧不同&#xff0c;它并不会内卷化&#xff0c;而是具有相对稳定性的领域。嵌入式开发在制造业等重要第二产业中扮演着关键角色&#xff0c;这些领域的稳定性…

ubuntu部署llama2-chinese

ubuntu上安装cuda见之前的blog&#xff0c;已安装cuda12&#xff0c;使用nvcc-V 下载llama2-chinese&#xff1a;GitHub - FlagAlpha/Llama2-Chinese: Llama中文社区&#xff0c;最好的中文Llama大模型&#xff0c;完全开源可商用 conda create -n llamachinese python3.10 pi…

C#二甲医院实验室信息系统源码

医院实验室信息系统简称(Hospitallaboratoryinformationsystem)&#xff0c;也可以称作实验室&#xff08;检验科&#xff09;信息系统或者LIS系统。 LIS定义 其主要功能是将检验的实验仪器传出的检验数据经分析后&#xff0c;自动生成打印报告&#xff0c;通过网络存储在数据…

当我分别问8款GPT一个问题。。。

前两天下班在地铁上无聊寻思问一下不同的GPT一个相同的问题&#xff0c;哪个会给出我比较满意的答案&#xff0c;然后我就提问&#xff1a;我老妹有点憨怎么办&#xff1f;&#xff08;ps&#xff1a;开玩笑的&#xff0c;嘻嘻。。。&#xff09; 很明显其他GPT都给出了大差不差…

Java的数据类型

文章目录 整形浮点型字符型布尔型基本数据类型转换自动类型转换自动类型转换注意和细节强制类型转换强制类型转换细节说明 整形 浮点型 字符型 字符型使用细节 布尔型 基本数据类型转换 自动类型转换 自动类型转换注意和细节 强制类型转换 自动类型转换的逆过程&#x…

金三银四精选面试题系列

Java中有哪几种方式来创建线程执行任务&#xff1f; 1. 继承Thread类 public class ZhouyuThread extends Thread{public static void main(String[] args) {ZhouyuThread thread new ZhouyuThread();thread.start();}Overridepublic void run() {System.out.println("h…

Mistral AI CEO宣布于2024年开源GPT-4级别模型

法国初创公司Mistral AI的首席执行官Arthur Mensch在法国国家广播电台宣布&#xff0c;公司计划于2024年开源GPT-4级模型&#xff0c;引发了业界的关注。 最近&#xff0c;Mistral AI推出了基于MoE架构的8X7B模型&#xff0c;与GPT3.5和Llama270B等其他流行模型相媲美&#xf…

leetcode --- 30. 串联所有单词的子串[C++ 滑动窗口/双指针]

原题&#xff1a;30. 串联所有单词的子串 - 力扣&#xff08;LeetCode&#xff09; 题目解析&#xff1a; 本题在这道题的算法原理基础上进行思考会简单许多 leetcode --- 438. 找到字符串中所有字母异位词[C/滑动窗口哈希表]-CSDN博客 关键信息---words中的字符串长度都相等 …

二叉树【数据结构】

目录 二叉树1. 二叉树定义二叉树的存储定义 2. 遍历二叉树(1) 前序遍历(2) 中序遍历(3) 后序遍历(4) 层序遍历 3. 二叉树的相关操作(1) 二叉树的初始化(2) 二叉树的结点的手动创建(3) 二叉树结点的个数(4) 二叉树叶子结点的个数(5) 二叉树的高度(6) 第k层结点个数(7) 通过前序遍…

科技巨头三巨头:百度、阿里巴巴、腾讯的崛起与角力

导言 百度、阿里巴巴、腾讯被誉为中国科技领域的“三巨头”&#xff0c;在搜索、电商、社交等多个领域取得了巨大成功。本文将深入探讨这三家公司的崛起原因、核心业务、战略布局以及彼此之间的竞争和合作关系。 1. 百度的搜索帝国 搜索引擎&#xff1a; 百度以其搜索…

Java 序列化机制详解

Java 序列化机制是一种将对象转换为字节流的过程&#xff0c;以便在网络上传输或保存到文件中&#xff0c;并能在需要时将字节流还原为对象。这一机制通过实现 java.io.Serializable 接口来实现&#xff0c;同时涉及到一些关键概念和注意事项。 Serializable 接口 Serializabl…

开发知识点-09Rust

Rust Rust 语言通常用于编写系统级软件、网络服务器和高性能应用程序&#xff0c;它具有以下特点&#xff1a;1. 高性能和内存安全&#xff1a;Rust 在保证高性能的同时&#xff0c;利用其所有权模型和借用检查器等特性确保内存安全&#xff0c;避免了 C/C 等语言的内存错误和崩…

瑞友天翼应用虚拟化系统 多处SQL 注入漏洞复现(可RCE)

0x01 产品简介 瑞友天翼应用虚拟化系统是西安瑞友信息技术资讯有限公司研发的具有自主知识产权,基于服务器计算架构的应用虚拟化平台。它将用户各种应用软件集中部署在瑞友天翼服务器(群)上,客户端通过WEB即可快速安全的访问经服务器上授权的应用软件,实现集中应用、远程接…

Pytorch nn.Linear()的基本用法与原理详解及全连接层简介

主要引用参考&#xff1a; https://blog.csdn.net/zhaohongfei_358/article/details/122797190 https://blog.csdn.net/weixin_43135178/article/details/118735850 nn.Linear的基本定义 nn.Linear定义一个神经网络的线性层&#xff0c;方法签名如下&#xff1a; torch.nn.Li…

生日蜡烛C语言

分析&#xff1a;假设这个人只能活到100岁&#xff0c;如果不这样规定的话&#xff0c;那么这个人就可以假设活到老236岁&#xff0c;直接一次吹236个蜡烛&#xff0c;我们就枚举出所以情况&#xff0c;从一岁开始。 #include <stdio.h> int f(int a,int b){//计算从a到…