【PyQt】(自定义类)QIcon派生,更易用的纯色Icon

嫌Qt自带的icon太丑,自己写了一个,主要用于纯色图标的自由改色。
当然,图标素材得网上找。



Qt原生图标与现代图标对比:

没有对比就没有伤害

Qt图标
Qt图标

网络素材图标
素材图标
请添加图片描述
请添加图片描述



自定义类XJQ_Icon:

from PyQt5.QtGui import QIcon,QPixmap,QImagefrom cv2 import cv2
import numpy as np
from functools import reduce__all__=['XJQ_Icon']
class XJQ_Icon(QIcon):def __init__(self,data,fg=(255,0,0,255),bg=(0,0,0,0)):#data可以为图片路径(str)或是图片数据(np.ndarray)# QIcon:https://doc.qt.io/qt-6/qicon.htmlsuper().__init__()if(isinstance(data,np.ndarray)):im=dataelif(isinstance(data,str)):im=self.Opt_LoadPictAsArray(data)else:raise Exception('data参数错误,类型仅能为np.ndarray(图片数据)或是str(图片路径)')if(len(fg)==3):fg=(*fg,255)if(len(bg)==3):bg=(*bg,255)msk=cv2.split(im)[3]# msk=reduce(lambda a,b:a|b,cv2.split(im))#废弃,更多时候只需要关注alpha的值self.__msk=cv2.threshold(msk,127,255,cv2.THRESH_BINARY)[1]#cv2纯色图:https://blog.csdn.net/qq_45666248/article/details/107666586self.__bg=np.zeros((*msk.shape,4),np.uint8)self.__fg=np.zeros((*msk.shape,4),np.uint8)self.__bg[:] = bgself.__fg[:] = fgself.__UpdatePixmap()def Set_ForeColor(self,fg):if(len(fg)==3):fg=(*fg,255)self.__fg[:] = fgself.__UpdatePixmap()def Set_BackColor(self,bg):if(len(bg)==3):bg=(*bg,255)self.__bg[:] = bgself.__UpdatePixmap()def __UpdatePixmap(self):#模运算bitwise_and:https://blog.csdn.net/qq_40210586/article/details/106572504fg=self.__fgbg=self.__bgfg=cv2.bitwise_and(fg,fg, mask=self.__msk)bg=cv2.addWeighted(bg,1,fg,1,0)pix=self.Trans_ArrayToPixmap(bg)self.__pix=pix#虽然没有setPixmap但有这个addPixmap函数,简单看了下这个函数的功能,符合预期,很好#https://wenku.baidu.com/view/8d3284563269a45177232f60ddccda38376be1ba.htmlself.addPixmap(pix)@staticmethoddef Opt_LoadPictAsArray(path):#cv2读取中文路径图片:https://www.zhihu.com/question/67157462/answer/251754530return cv2.imdecode(np.fromfile(path,dtype=np.uint8),cv2.IMREAD_UNCHANGED)@staticmethoddef Trans_ArrayToPixmap(arr):#arr对应四通道图片。不使用PIL.Image模块#https://blog.csdn.net/comedate/article/details/121259033#https://blog.csdn.net/weixin_44431795/article/details/122016214img=QImage(arr.data, arr.shape[1], arr.shape[0], arr.shape[1]*4, QImage.Format_RGBA8888)return QPixmap(img)


示例代码+运行结果:

if __name__ == '__main__':import sysfrom PyQt5.QtWidgets import QWidget,QApplication,QPushButton,QLabelfrom PyQt5.QtCore import QSizeapp = QApplication(sys.argv)# icon=XJQ_Icon('返回.png')# icon=XJQ_Icon('三角形-002.png')icon=XJQ_Icon('比赛控制者.png')icon.Set_ForeColor((0,255,255,192))btn=QPushButton("ABC")btn.setIconSize(QSize(100,100))btn.setStyleSheet('font-size:50px;background:#FF8844')btn.setIcon(icon)btn.show()sys.exit(app.exec_())

运行结果



碎碎念:

  • 不得不说,与图片处理相关的复杂操作尽量别拉上Qt,会将操作复杂化的(而且往往得不到想要的效果)。像是在这篇帖子如何在 QPainter 中使用mask中,哪怕这么简单而又常见的场景,解决方案都那么抽象。
  • 图标素材请去网上获取,我看着爱给网提供的素材都还不错,虽然资源收费,但貌似没有很好的反爬防盗机制,图片很轻易就能保存下来(嘛如果真有防盗那直接去别的素材网就好了


参考:

  • 网络图标素材-爱给网:https://www.aigei.com/view/98465.html
  • QIcon类:https://doc.qt.io/qt-6/qicon.html
  • QIcon.addPixmap方法:https://wenku.baidu.com/view/8d3284563269a45177232f60ddccda38376be1ba.html
  • cv2无法读取中文路径的解决方法:https://www.zhihu.com/question/67157462/answer/251754530
  • 创建cv2纯色图:https://blog.csdn.net/qq_45666248/article/details/107666586
  • cv2掩模操作bitwise_and:https://blog.csdn.net/qq_40210586/article/details/106572504
  • cv2图片叠加addWeighted:https://blog.csdn.net/qq_29391809/article/details/117394512

未经本人同意不得私自转载。本文发布于CSDN:https://blog.csdn.net/weixin_44733774/article/details/135282787

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Java连接Mysql报错:javax.net.ssl.SSLException: Received fatal alert: internal_error

大致报错日志如下: The last packet successfully received from the server was 11 milliseconds ago. The last packet sent successfully to the server was 10 milliseconds ago.at sun.reflect.GeneratedConstructorAccessor275.newInstance(Unknown Source)…

Jackson—Anti-Human IgE Antibodies

Jackson lmmunoResearch推出一系列适用于诊断试剂研发的Mouse Monoclonal Anti-Human IgE antibodies(小鼠抗人IgE单克隆抗体),补充了Jackson现有的抗人lgG、IgM和lgA抗体产品,抗人IgE可与一系列特定的报告分子偶联(如…

HTML+CSS+JS网页设计期末课程大作业 web课程设计 web前端开发 网页规划与设计

HTMLCSSJS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计 💥 文章目录一、🚩 网站描述二、🎌 网站介绍三、🏴 网站类型A 个人博客主题B 人物明星主题C 旅游主题D 游戏主题E 动漫主题F 美食主题G 校园主题H 企…

HTML5+CSS3小实例:左右摇晃的输入框

实例:左右摇晃的输入框 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge">&l…

网页设计期末 建筑博物馆首页 HTML+CSS+js 完整代码(轮播图+瀑布流)

文章目录 前言&#xff1a;完整代码在总结处跳转&#xff01;&#xff01;&#xff01; 描述&#xff1a;结果展示&#xff1a;部分代码演示&#xff1a;&#xff08;完整代码在总结处跳转&#xff09;总结&#xff1a;&#xff08;完整代码在此处跳转&#xff09; 前言&#x…

Unity C# Mp3 Mp4 音频 视频 合成

需求 将声音文件合并到视频中 限制 暂时只支持Windows使用 准备 下载ffmpeg.exe 解压后得到exe https://ffmpeg.org/download.html#releases 注意事项&#xff1a; 目录要在一起 代码 public void StartExe(){if (File.Exists(ffmpegExe)){ string mp4;string mp3;//…

Python爱心光波完整代码

文章目录 环境需求完整代码详细分析环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.blog.csdn.net/arti…

数据库开发之子查询案例的详细解析

1.5 案例 基于之前设计的多表案例的表结构&#xff0c;我们来完成今天的多表查询案例需求。 准备环境 将资料中准备好的多表查询的数据准备的SQL脚本导入数据库中。 分类表&#xff1a;category 菜品表&#xff1a;dish 套餐表&#xff1a;setmeal 套餐菜品关系表&#x…

盘点2023年Sui游戏领域的五大亮点

在不断发展的Web3游戏领域中&#xff0c;Sui作为一个强大的平台&#xff0c;为游戏行业的转型之旅开辟了独特的道路。Sui独特的网络架构提供了可扩展性和高吞吐量&#xff0c;使得区块链环境下的游戏成为可能。Sui原生功能的应用&#xff0c;如赞助交易&#xff0c;显著简化了游…

湘潭大学-2023年下学期-c语言-作业0x0a-综合1

A 求最小公倍数 #include<stdio.h>int gcd(int a,int b) {return b>0?gcd(b,a%b):a; }int main() {int a,b;while(~scanf("%d%d",&a,&b)){if(a0&&b0) break;printf("%d\n",a*b/gcd(a,b));}return 0; }记住最大公约数的函数&…

2024年科技行业十大经济预测

当我们站在新的一年的风口浪尖上时&#xff0c;科技行业正准备迎接重大变革和创新&#xff0c;这些变革和创新将塑造2024年的经济格局。以下是未来一年科技行业的十大经济预测。 低代码&#xff1a;低代码和无代码平台从 3 年前开始被大规模的应用&#xff0c;发展到现在已经逐…

cf918div4的E题讲解

虽然是div4&#xff0c;但是打的稀烂&#xff0c;哭死。 E题看了jiangly的题解豁然开朗&#xff0c;原来思路这么简单。被自己蠢到了&#xff0c;我傻傻的用前缀和&#xff0c;两层for枚举区间&#xff0c;不出意外TLE了&#xff0c;写的那一刻就知道要超时&#xff0c;但是没…

AVL树(超详解)

文章目录 前言AVL树的概念AVL树的实现定义AVL树insert 单旋左单旋右单旋左单旋代码右单旋代码 双旋左右双旋右左双旋 测试AVL树的性能 前言 AVL树是怎么来的呢&#xff1f; 我们知道搜索二叉树会存在退化问题&#xff0c;退化以后就变成单支或者接近单支。 它的效率就变成O(N)…

【每日一题】收集巧克力

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;枚举操作数 写在最后 Tag 【枚举】【数组】【2023-12-28】 题目来源 2735. 收集巧克力 题目解读 有长度为 n, 下标从 0 开始的整数数组 nums, 表示收集不同类型的巧克力的成本. nums[i] 表示收集类型 i 巧克力的成本…

3、Git分支操作与团队协作

Git分支操作 1.什么是分支2. 分支的好处3. 分支的操作3.1 查看分支3.2 创建分支3.3 切换分支3.4 修改分支3.5 合并分支3.6 产生和解决冲突 4. 创建分支和切换分支图解5. Git团队协作机制团队内协作跨团队协作 均在git bash中进行操作。事先建好本地工作库 1.什么是分支 在版本…

「亲测有效」ChatGPT Plus会员/GPT4开通方法 — 仅需支付宝或微信

这是我这两天找到的一个「只需要有支付宝或者微信」就可行的会员开通方法。 这个方法亲测有效&#xff0c;半个小时前给一个新的ChatGPT账号成功开通Plus会员&#xff0c; 并且只要有微信或支付宝就能成功支付 准备工作 首先我们准备好一个没有开通GPT4的ChatGPT账号&#xf…

国产双链笔记软件Blossom

什么是 Blossom &#xff1f; Blossom 是一款支持私有部署的云端存储双链笔记软件 &#xff0c;你可以将你所有的笔记&#xff0c;图片&#xff0c;个人计划安排保存在自己的服务器中&#xff0c;并在任意设备之间实时同步&#xff0c;同时&#xff0c;Blossom 还是一个动态博客…

青龙方风水禁忌

峰民曾经去西洞庭给一位装修房子的福主进行了详细的风水策划&#xff0c;在他家纠正了很多不利的风水格局之处。其实&#xff0c;峰民每次给福主进行风水策划的过程中&#xff0c;都会发现很多的问题。 就现在进行家装的朋友&#xff0c;这里峰民给大家提一个实用的风水问题&am…

计算机图形学光线追踪大作业C++基于Optix为框架实现的光线追踪算法合集,含直射光阴影效果、漫反射阴影效果、镜面反射效果等示例

MineRay 使用Optix为框架实现的光线追踪算法。 包含4个示例&#xff0c;直射光阴影效果、漫反射阴影效果、镜面反射效果、折射效果 环境需求 本项目在Windows 10中测试&#xff0c;以下环境为Windows中的环境 CUDA 10.1 OptiX 7 SDK cmake 编译方式 使用cmake编译 打开Mi…

2024 通义语音 AI 技术图景,大模型引领 AI 再进化

自 1956 年达特茅斯会议上&#xff0c;约翰麦卡锡首次提出了“人工智能”这一术语。AI 在此后七十年的发展中呈现脉冲式趋势&#xff0c;每隔 5-10 年会出现一次技术革新和域定。在这一技术探索进程之中&#xff0c;预训练基础模型逐渐成为主流探索方向&#xff0c;受到学术界和…