我正在尝试使用QLabel
(在代码段中称为myLabel
)显示图像。 img_data
是从数据库加载的二进制数据。
因为我无法弄清楚如何直接从内存中获取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)
这在我的Ubuntu 18.04机器上可以正常工作,但在Windows 10上却无法正常工作。在Windows上,它将正确显示no image available
,但是当找到映像时,QLabel
将会结束一片空白,什么也不显示。
在两个带有全新安装的PyQt5
软件包的操作系统上运行python 3.7。
如何在Windows上执行此操作?也许有一种更优雅的方法可以避免编写临时文件?
答案 0 :(得分:1)
您可以使用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_())