PyQt5入门4——给目标检测算法构建一个简单的界面
PyQt5入门4——给目标检测算法构建一个简单的界面
- 学习前言
- 要构建怎么样的界面
- 实例使用
- 1、窗口构建
- a、按钮:获取图片
- b、Inputs、Outputs文本提示
- c、Inputs、Outputs图片显示
- d、箭头显示
- e、整点祝福
- 2、主程序运行
- 全部代码
学习前言
搞搞可视化界面哈,虽然不一定有用,但是搞一下。
要构建怎么样的界面
目标检测算法一般就是检测个图片,然后显示图片结果就可以了。
最简单的情况,我们需要一个按钮读取图片,然后后有一个地方显示图片,就像下面这样子。
这里还没加入目标检测算法,只是搭个架子。
实例使用
1、窗口构建
a、按钮:获取图片
此处参考PyQt5入门3,使用到QPushButton类。
#-----------------------------#
# 获取图片按钮
#-----------------------------#
self.btn_photo = QPushButton('获取图片', self)
self.btn_photo.setToolTip('点击后从电脑中读取图片')
self.btn_photo.setIcon(QIcon("img/icon/Search.jpeg"))
self.btn_photo.setIconSize(QSize(30, 30))
self.btn_photo.resize(100, 40)
self.btn_photo.move(10, 10)
self.btn_photo.clicked.connect(self.openimage)
写一下它的回调函数,在后面的Inputs图片处显示。
#-----------------------------#
# 打开图片模式
#-----------------------------#
@pyqtSlot()
def openimage(self):imgName, _ = QFileDialog.getOpenFileName(self, "打开图片", "", "Images (*.jpg, *.png);;All Files(*)")if len(imgName)==0:returnshow = Image.open(imgName).convert("RGB")show = show.resize([self.label_w, self.label_h])showImage = QImage(np.array(show), np.shape(show)[1], np.shape(show)[0], QImage.Format_RGB888)self.label_show_input.setPixmap(QPixmap.fromImage(showImage))
b、Inputs、Outputs文本提示
此处参考PyQt5入门1,使用到QTextBrowser类。
写两段文字,分别为Inputs和Outputs。
#-----------------------------#
# 写一段话
# 放到10,60
# 拉伸长度为200,30
#-----------------------------#
self.origin_text = QTextBrowser(self)
self.origin_text.setTextColor(QColor(23,32,32))
self.origin_text.move(10, 60)
self.origin_text.resize(200, 30)
self.origin_text.setText("Inputs:")
self.origin_text.setStyleSheet("border:none;background-color:rgba(0,0,0,0)")#-----------------------------#
# 写一段话
# 放到10,60
# 拉伸长度为200,30
#-----------------------------#
self.output_text = QTextBrowser(self)
self.output_text.move(480, 60)
self.output_text.resize(200, 30)
self.output_text.setText("Outputs:")
self.output_text.setStyleSheet("border:none;background-color:rgba(0,0,0,0)")
c、Inputs、Outputs图片显示
此处参考PyQt5入门2,使用到QLabel类。
#-----------------------------#
# 设置显示的图片
#-----------------------------#
self.label_h = 384
self.label_w = 384
self.label_show_input = QLabel(self)
self.label_show_input.move(10, 100)
self.label_show_input.setFixedSize(self.label_w, self.label_h)
self.label_show_input.setText("Inputs!")
self.label_show_input.setStyleSheet("QLabel{background:white;}")
self.label_show_input.setObjectName("Inputs")#-----------------------------#
# 设置显示的图片
#-----------------------------#
self.label_h = 384
self.label_w = 384
self.label_show_camera = QLabel(self)
self.label_show_camera.move(480, 100)
self.label_show_camera.setFixedSize(self.label_w, self.label_h)
self.label_show_camera.setText("Outputs!")
self.label_show_camera.setStyleSheet("QLabel{background:white;}")
self.label_show_camera.setObjectName("Outputs")
d、箭头显示
这里没找到很好的绘画方法,直接用文本的箭头来显示。PyQt5入门1,使用到QTextBrowser类。
#-----------------------------#
# 搞个箭头好看点
#-----------------------------#
self.arrow_text = QTextBrowser(self)
self.arrow_text.move(410, 275)
self.arrow_text.resize(200, 50)
self.arrow_text.setText("→")
self.arrow_text.setStyleSheet("border:none;background-color:rgba(0,0,0,0);font-size:50px")
e、整点祝福
祝你们每天开心。
参考PyQt5入门1,使用到QTextBrowser类。
#-----------------------------#
# 写一段话
# 放到10,500
# 拉伸长度为200,30
#-----------------------------#
self.text_browser = QTextBrowser(self)
self.text_browser.move(10, 500)
self.text_browser.resize(200, 30)
self.text_browser.setText("Happy New Day")
self.text_browser.setStyleSheet("border:none;background-color:rgba(100,255,255,255)")
2、主程序运行
这个是调用上述创建的Example,细节不必纠结,只需要知道这样便可以调用PyQt5即可。
if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())
全部代码
import sys
import numpy as np
from PIL import Imagefrom PyQt5.QtGui import QImage, QPixmap, QIcon, QColor
from PyQt5.QtCore import pyqtSlot, QSize, Qt
from PyQt5.QtWidgets import QApplication, QTextBrowser, QWidget, QLabel, QPushButton, QFileDialog, QFrameclass Example(QWidget):def __init__(self):QWidget.__init__(self)#-----------------------------## 界面显示相关内容#-----------------------------#self.initUI()def initUI(self):#-----------------------------## 初始化标题,界面大小#-----------------------------#self.resize(900, 540)self.setWindowTitle('Easy Object Detection GUI')#-----------------------------## 获取图片按钮#-----------------------------#self.btn_photo = QPushButton('获取图片', self)self.btn_photo.setToolTip('点击后从电脑中读取图片')self.btn_photo.setIcon(QIcon("img/icon/Search.jpeg"))self.btn_photo.setIconSize(QSize(30, 30))self.btn_photo.resize(100, 40)self.btn_photo.move(10, 10) self.btn_photo.clicked.connect(self.openimage)#-----------------------------## 写一段话# 放到10,500# 拉伸长度为200,30#-----------------------------#self.text_browser = QTextBrowser(self)self.text_browser.move(10, 500)self.text_browser.resize(200, 30)self.text_browser.setText("Happy New Day")self.text_browser.setStyleSheet("border:none;background-color:rgba(100,255,255,255)")#-----------------------------## 写一段话# 放到10,60# 拉伸长度为200,30#-----------------------------#self.origin_text = QTextBrowser(self)self.origin_text.setTextColor(QColor(23,32,32))self.origin_text.move(10, 60)self.origin_text.resize(200, 30)self.origin_text.setText("Inputs:")self.origin_text.setStyleSheet("border:none;background-color:rgba(0,0,0,0)")#-----------------------------## 写一段话# 放到10,60# 拉伸长度为200,30#-----------------------------#self.output_text = QTextBrowser(self)self.output_text.move(480, 60)self.output_text.resize(200, 30)self.output_text.setText("Outputs:")self.output_text.setStyleSheet("border:none;background-color:rgba(0,0,0,0)")#-----------------------------## 搞个箭头好看点#-----------------------------#self.arrow_text = QTextBrowser(self)self.arrow_text.move(410, 275)self.arrow_text.resize(200, 50)self.arrow_text.setText("→")self.arrow_text.setStyleSheet("border:none;background-color:rgba(0,0,0,0);font-size:50px")#-----------------------------## 设置显示的图片#-----------------------------#self.label_h = 384self.label_w = 384self.label_show_input = QLabel(self)self.label_show_input.move(10, 100)self.label_show_input.setFixedSize(self.label_w, self.label_h)self.label_show_input.setText("Inputs!")self.label_show_input.setStyleSheet("QLabel{background:white;}")self.label_show_input.setObjectName("Inputs")#-----------------------------## 设置显示的图片#-----------------------------#self.label_h = 384self.label_w = 384self.label_show_camera = QLabel(self)self.label_show_camera.move(480, 100)self.label_show_camera.setFixedSize(self.label_w, self.label_h)self.label_show_camera.setText("Outputs!")self.label_show_camera.setStyleSheet("QLabel{background:white;}")self.label_show_camera.setObjectName("Outputs")self.show()#-----------------------------## 打开图片模式#-----------------------------#@pyqtSlot()def openimage(self):imgName, _ = QFileDialog.getOpenFileName(self, "打开图片", "", "Images (*.jpg, *.png);;All Files(*)")if len(imgName)==0:returnshow = Image.open(imgName).convert("RGB")show = show.resize([self.label_w, self.label_h])showImage = QImage(np.array(show), np.shape(show)[1], np.shape(show)[0], QImage.Format_RGB888)self.label_show_input.setPixmap(QPixmap.fromImage(showImage))if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())
相关文章:

PyQt5入门4——给目标检测算法构建一个简单的界面
PyQt5入门4——给目标检测算法构建一个简单的界面 学习前言要构建怎么样的界面实例使用1、窗口构建a、按钮:获取图片b、Inputs、Outputs文本提示c、Inputs、Outputs图片显示d、箭头显示e、整点祝福 2、主程序运行 全部代码 学习前言 搞搞可视化界面哈,虽…...
Pandas数据分析系列9-数据透视与行列转换
Pandas 数据透视表 当数据量较大时,为了更好的分析数据特征,通常会采用数据透视表。数据透视表是一种对数据进行汇总和分析的工具,通过重新排列和聚合原始数据,可以快速获得更全面的数据洞察。数据透视表在Excel中也是经常使用的一个强大功能,在Pandas模块,其提供了pivot…...

部分背包问题细节(贪心)
有一种情况是,背包可以把金币全部拿走: 如果num小于0则返回值...

windows协议详解之-RPC/SMB/LDAP/LSA/SAM域控协议关系
如果你在windows域控环境中,例如企业的网络中开启wireshark抓包,你一定会遇到一大堆各种各样的协议。不同于互联网服务(大多基于HTTP),为了实现域控中各种各样的服务,windows的域控环境中采用了非常多的协议…...

uniapp中 background-image 设置背景图片不展示问题
有问题 <view class"file-picker__box jsz" tap"jszxszUpload(jsz)"></view>.jsz {background-image: url(../../static/example_drive.png); }解决1 <view class"file-picker__box jsz" :style"{ background-image: url(…...
Elasticsearch打分机制
一 例子 xx搜索引擎,就搜索结果本身而言,xx返回了正确的结果。因为返回的结果中,都包含了搜索的关键字。而我们从逻辑上来看,这一堆广告算是咋回事!这个吐槽是从用户的角度出发的。很显然,返回的结果中,尤其是前几条,有时甚至是前几页,都跟我们想要的结果相差深远! …...

【pdf密码】为什么我的PDF文件不能复制文字?
大家现在接触PDF文件越来越多,有的时候在网上下载的PDF文件打开之后,发现选中文字之后无法复制。甚至其他功能也都无法使用,这是怎么回事?该怎么办? 当我们发现文件打开之后,编辑功能无法使用,很…...
vim程序编辑器
最近读书读完感觉没有读一样,所以决定写笔记记录下 vi的使用包括三种模式 一般模式 编辑模式 a,i,o,r,A,I,O,R 用来插入或者替换内容 命令行模式 :wq保存退出:wq!强制保存退出…...

新手如何学习挖漏洞?看这篇就够了【网络安全】
什么是漏洞挖掘 漏洞挖掘是指通过分析软件、系统或网络中存在的安全漏洞来发现并利用这些漏洞。漏洞挖掘是信息安全领域的一项重要工作,可以帮助企业和组织提高系统的安全性,避免黑客攻击和数据泄露。 漏洞挖掘的流程一般可以概括为以下几个步骤&#x…...
CentOS 7.8 kubeadm安装 k8s 1.26
CentOS 7.8 kubeadm安装 k8s 1.26 规划 集群 主机名IP地址k8s-master01192.168.200.101k8s-master02192.168.200.102k8s-master03192.168.200.103k8s-node01192.168.200.201k8s-node02192.168.200.202 VIP(虚拟IP) 192.168.200.80 Harbor http://192.168.200.50 基础 …...

成都瀚网科技有限公司抖音小店:创新营销引领电商潮流
在当今数字化时代,抖音作为一款备受欢迎的短视频平台,不仅吸引了大量用户的关注,还为众多电商企业提供了新的销售渠道。成都瀚网科技有限公司抖音小店便是其中之一,凭借其独特的营销策略和优质的产品,成为了抖音电商领…...

警惕!又2本期刊被“On Hold”!
【SciencePub学术】 此前,继一本SSCI期刊被取消“On hold”标识后,仍处于“On Hold”状态的期刊有6本,其中包括4本SCI期刊和2本ESCI期刊。近日,经小编查询,又新增2本“On Hold”期刊,详情如下:…...

一台服务器成了哆啦A梦的神奇口袋
如果我有一台服务器,那简直就像打开了哆啦A梦的神奇口袋!可以做的事情可太多啦,比如: 学习和探险 首先嘛,当然是用来学习和探险啦!我可以安装和配置各种操作系统、编程语言和工具,深入了解计…...
java 关闭access文件资源后,无法删除文件
复现问题 // 数据库驱动String DRIVER_CLASS "net.ucanaccess.jdbc.UcanaccessDriver";// 数据库连接地址String DB_URL "jdbc:ucanaccess://D/test.mdb";String DB_USER ""; // 数据库用户名称String DB_PASSWORD "";// 数据库用…...

Typecho 添加 Emoji 表情报错「解决方案」
Typecho 添加 Emoji 表情报错 文章目录 Typecho 添加 Emoji 表情报错前言Emoji 表情utf8mb4 与 UTF8 解决方案[1] 数据库编码更改[2] 数据库配置文件更改 前言 Typecho 添加 Emoji 表情不支持,报错 Database Query Error Emoji 表情 Emoji 就是表情符号,…...

【C#】委托与事件
目录 一、委托 1.什么是委托 2.委托类型的声明与初始化 3.委托类型引用方法的调用 4.使用委托类型作为方法的参数 5.Action委托 6.Func委托 7.通用类型冒泡排序 8.多播委托 二、Lambda表达式 1.匿名方法 2.Lambda表达式表示匿名方法 三、事件 1.什么是事件 2.事件…...

化工园区数字孪生可视化管控平台,赋予园区安全环保智慧发展
化工行业作为国民经济的支柱和工业发展的引擎,对安全生产、环保节能、应急管控有着很高的要求。目前国内外化工园区面临安全和环保两大压力。为有效解决这两大难题,巨蟹数科综合运用物联网、数字孪生等新一代信息技术,建设了数字孪生园区智慧…...
Laplacian算子详解及例程
Laplacian算子是一种常用的边缘检测算法,它是通过对图像进行二阶微分来检测图像的边缘。Laplacian算子的优点是能够对不同方向的边缘进行检测,对于边缘的粗细和强度变化也比较敏感。 Laplacian算子的计算公式为: ∇f ∂f/∂x ∂f/∂y其中…...

《数据结构与算法》学习指导手册
我觉得,对于初学者来说,先把最简单、最基础、最重要的知识点掌握好,再去研究难度较高、更加高级的知识点,这样由易到难、循序渐进的学习路径,无疑是最合理的。 这里有每个知识点的难易程度、需要你掌握到什么程度、具…...

ubuntu安装配置mantis
目录 前言安装Apache2安装PHP安装数据库mariadbmariadb安装MariaDB重置密码为MantisBT创建数据库和用户 phpmyadmin安装和配置安装phpmyadmin查看安装内容配置phpmyadmin1.phpmyadmin apache配置文件2.为phpmyadmin创建数据库和用户3.修改配置文件config-db.php4.重新运行 管理…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...