Python PyQt5使用内存中的QLabel显示图像

Python PyQt5使用内存中的QLabel显示图像,python,pyqt5,Python,Pyqt5,我试图使用QLabel(在代码片段中称为myLabel)来显示图像img_数据是从数据库加载的二进制数据。 因为我不知道如何直接从内存中获取QPixmap,所以我尝试将图像写入一个临时文件,并将该文件加载到QPixmap构造函数中 import tempfile from PyQt5.QtGui import QPixmap try: img_data = load_operation_that_might_fail() except: myLabel.setText("no

我试图使用
QLabel
(在代码片段中称为
myLabel
)来显示图像
img_数据
是从数据库加载的二进制数据。 因为我不知道如何直接从内存中获取QPixmap,所以我尝试将图像写入一个临时文件,并将该文件加载到QPixmap构造函数中

import tempfile
from PyQt5.QtGui import QPixmap


try:
    img_data = load_operation_that_might_fail()
except:
    myLabel.setText("no image available")
    return

with tempfile.NamedTemporaryFile("wb", prefix="qt-image-", suffix=".png") as file:
    file.write(img_data)
    file.flush()
    pixmap = QPixmap(file.name)
    myLabel.setPixmap(pixmap)
这在我的Ubuntu18.04机器上运行良好,但在Windows10上不起作用。在Windows上,它将正确显示
无可用图像
,但当找到图像时,
QLabel
将以空白结束,根本不显示任何内容

使用新安装的
PyQt5
软件包在两个操作系统上运行python 3.7


如何在Windows上实现此功能?也许有一种更优雅的方法可以避免编写临时文件?

您可以使用
loadFromData

在您的示例中,以下各项应起作用:

try:
    img_data = load_operation_that_might_fail()
except:
    myLabel.setText("no image available")
    return

pixmap = QPixmap()
myLabel.loadFromData(img_data, 'png')
这是一个完整的示例,只需在“c:/temp/test.png”中放置一个图像:

from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QLabel, QApplication)
from PyQt5.QtGui import QPixmap
import sys


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        hbox = QHBoxLayout(self)
        pixmap = QPixmap()
        pixmap.loadFromData(self.load_operation_that_might_fail(), 'png')

        lbl = QLabel(self)
        lbl.setPixmap(pixmap)

        hbox.addWidget(lbl)
        self.setLayout(hbox)

        self.setWindowTitle('Example')
        self.show()


    def load_operation_that_might_fail(self):
        with open('c:/temp/test.png', 'rb') as f:
            return f.read()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())