Pyside/Pyqt QLbal设置图片不显示(QLabel无法设置24位深度图片)

本文介绍在使用PyQt进行UI设计时遇到的图片位深问题及解决方案。主要探讨了如何处理24位图片无法正常显示的问题,并提供了解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

在做Python的UI课设时,希望给登录的Widget界面设置背景图片,网上查到的方法基本都是Mainwindows通过setstyleSheet的方法解决,而我的课设由于有多个界面,想要给其中的子界面设置背景
想到的方法是通过QLabel设置图片(借助QPixmap实现)
在这里插入图片描述
从给定fileName的文件构造一个 pixmap
如果文件不存在或格式未知,则像素图将成为空像素图(null)

class Loginfrm(QWidget):
    def __init__(self):
        super().__init__()
        # 动态加载UI文件
        self.ui = QUiLoader().load('Ui/LoginFrm.ui')
        self.InitUI()
        
    def InitUI(self):
		pixmap = QtGui.QPixmap(r'Image\Picture\1.png')
        print(pixmap)
        # 这里是动态调用UI文件
        self.ui.Label_bg.setPixmap(pixmap)
        # 如果是静态态调用UI文件
        # self.ui.setPixmap(pixmap)

而这个方法一会适用,一会不适用,通过对比发现问题出在图片的位深度上
当读入图片为32位深度时
在这里插入图片描述
在这里插入图片描述
当读入图片为24位深度时
在这里插入图片描述
在这里插入图片描述
找到问题在于,QPixmap只能读32位深度的图片

解决方法

解决方法就非常简单了,把图片从24位转成32位
这里就不过多介绍了,非常简单
1.利用QQ或者微信截图
2.利用opencv或PIL
3.先用QFile把文件 全部读取,然后再用loadData()加载

发现这个破bug浪费了一天时间。。。

PyQt6和PySide6中,可以使用QPixmap类来显示网络图片。具体步骤如下: 1. 导入必要的模块 ```python from PyQt6.QtCore import QUrl from PyQt6.QtGui import QPixmap from PyQt6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply from PyQt6.QtWidgets import QApplication, QLabel, QMainWindow ``` 2. 创建QNetworkAccessManager对象 ```python manager = QNetworkAccessManager() ``` 3. 发送网络请求并接收响应 ```python url = QUrl("https://example.com/image.jpg") request = QNetworkRequest(url) reply = manager.get(request) ``` 4. 在响应结束时接收数据并显示图片 ```python def on_reply_finished(reply): data = reply.readAll() pixmap = QPixmap() pixmap.loadFromData(data) label.setPixmap(pixmap) reply.finished.connect(on_reply_finished) ``` 完整代码示例: ```python from PyQt6.QtCore import QUrl from PyQt6.QtGui import QPixmap from PyQt6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply from PyQt6.QtWidgets import QApplication, QLabel, QMainWindow class MainWindow(QMainWindow): def __init__(self): super().__init__() self.label = QLabel(self) self.setCentralWidget(self.label) url = QUrl("https://example.com/image.jpg") request = QNetworkRequest(url) manager = QNetworkAccessManager() reply = manager.get(request) reply.finished.connect(self.on_reply_finished) def on_reply_finished(self, reply): data = reply.readAll() pixmap = QPixmap() pixmap.loadFromData(data) self.label.setPixmap(pixmap) if __name__ == "__main__": app = QApplication([]) window = MainWindow() window.show() app.exec() ``` 运行该程序,即可显示网络图片
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值