记录Pyqt5通过样式表给主窗口设置背景图片的踩坑细节以及改正方法

本文主要是介绍记录Pyqt5通过样式表给主窗口设置背景图片的踩坑细节以及改正方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

在编写交互式界面的时候,基本功能实现之后想要给窗口换一个好看的背景。那么问题就来了,我不想通过qt设计师来换背景(其实就是菜),一是因为在设计师的资源文件里加载的背景在实际运行时会影响其他控件比如按钮的样式,二是想着直接在继承类的代码中设置样式表封闭性很好,后续如果想用设计师改UI不会对窗口造成什么影响。

问题

最初的时候我尝试直接如下所示设置样式表:

self.setStyleSheet("#MainWindow{""border-image: url(./bg.jpg);""}")

运行时虽不报错,但是提示无法从该路径创建Pixmap。然后就是漫长的问度娘之旅。看到有其他仁兄用调色板来实现MainWindow背景图片的设置,所以我也尝试了下列方法:

palette = QPalette()
palette.setBrush(QPalette.Background,QBrush(QPixmap('./bg.jpg'))
self.setPalette(palette)

奇怪的事情发生了,运行的时候并没有像那位仁兄[1]一样完美设置,而是出现了全黑的景象,属于给我整蒙蔽了。

又看到有仁兄说是运行文件找不到qjpeg.dll,可以把qt/plugin/imageformat文件夹复制到当前目录下来解决。但是对于我这个倒霉蛋来说依然没用。

解决办法

懵逼了很久,突然看到了自己实现其他功能时候用到的os模块,于是想着能不能把图片换成绝对路径。所以我就开始尝试咯。需要注意的是交互式界面最终是要给别人用的,所以绝对路径的获取还是要依托os模块,而不能暴力地直接自己把自己电脑上的绝对路径写上来。解决代码如下:

path = os.path.abspath(__file__)
path1 = os.path.split(path)[0]    # 获取当前目录
jpg_path = os.path.join(path1, '..')    # 获取当前目录的上级目录
jpg_path = os.path.join(jpg_path, 'bg1.jpg')  # 拼接为完整的绝对路径
jpg_path = jpg_path.replace('\\', "/")   # 注意读取.jpg路径要用/
self.setStyleSheet("#MainWindow{""border-image: url(%s);""}" % (jpg_path))

最后一运行,yes!终于成功了,效果如下:
在这里插入图片描述
哈哈哈哈自认为还是有点好看的。

reference:

[1]https://blog.csdn.net/qq_37974048/article/details/104300217

这篇关于记录Pyqt5通过样式表给主窗口设置背景图片的踩坑细节以及改正方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/843168

相关文章

golang中reflect包的常用方法

《golang中reflect包的常用方法》Go反射reflect包提供类型和值方法,用于获取类型信息、访问字段、调用方法等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录reflect包方法总结类型 (Type) 方法值 (Value) 方法reflect包方法总结

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令