You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5添加二维码图片报错:ImageQt类型不匹配问题求助

解决PyQt5中二维码图片显示的TypeError问题

问题场景

开发二维码项目时,需要将链接转为二维码并在PyQt5窗口中直接显示(无需保存文件),使用qrcode库实现,但运行代码时报错:

TypeError: fromImage(QImage, flags: Union[Qt.ImageConversionFlags, Qt.ImageConversionFlag] = Qt.AutoColor): argument 1 has unexpected type 'ImageQt'

测试代码如下:

from PyQt5 import QtWidgets
from PyQt5 import QtGui
import sys
import qrcode

qr_coda_as_an_image = qrcode.make("Link")
qr_coda_as_an_image = qr_coda_as_an_image.get_image()
qr_coda_as_an_image = qr_coda_as_an_image.toqimage()

app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.resize(800,500)
window_layout = QtWidgets.QGridLayout()

image = QtGui.QPixmap.fromImage(qr_coda_as_an_image)

first_widget = QtWidgets.QLabel()
first_widget.setPixmap(image)

window_layout.addWidget(first_widget)
window.setLayout(window_layout)
window.show()
app.exec()

问题原因

qrcode.make()返回的是PIL Image对象,调用toqimage()后得到的是PIL的ImageQt包装对象,而非PyQt5原生的QImage类型,导致QPixmap.fromImage()无法识别。

解决方案

有两种可行的修正方式:

方式1:提取ImageQt内部的原生QImage

直接获取ImageQt对象封装的QImage实例:

from PyQt5 import QtWidgets
from PyQt5 import QtGui
import sys
import qrcode
from PIL.ImageQt import ImageQt

qr_coda_as_an_image = qrcode.make("Link")
qr_coda_as_an_image = qr_coda_as_an_image.get_image()
# 转换为ImageQt后提取内部QImage
image_qt = ImageQt(qr_coda_as_an_image)
q_image = image_qt.qimage

app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.resize(800,500)
window_layout = QtWidgets.QGridLayout()

image = QtGui.QPixmap.fromImage(q_image)

first_widget = QtWidgets.QLabel()
first_widget.setPixmap(image)

window_layout.addWidget(first_widget)
window.setLayout(window_layout)
window.show()
app.exec()

方式2:通过字节流直接创建QImage

绕过ImageQt,将PIL图像转为字节流后直接加载为QImage:

from PyQt5 import QtWidgets
from PyQt5 import QtGui
from PyQt5.QtCore import QByteArray, QBuffer
import sys
import qrcode

qr_coda_as_an_image = qrcode.make("Link")
# 将PIL图像转为PNG字节流
buffer = QBuffer()
buffer.open(QBuffer.ReadWrite)
qr_coda_as_an_image.save(buffer, "PNG")

# 从字节流加载QImage
q_image = QtGui.QImage()
q_image.loadFromData(buffer.data())

app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.resize(800,500)
window_layout = QtWidgets.QGridLayout()

image = QtGui.QPixmap.fromImage(q_image)

first_widget = QtWidgets.QLabel()
first_widget.setPixmap(image)

window_layout.addWidget(first_widget)
window.setLayout(window_layout)
window.show()
app.exec()

内容的提问来源于stack exchange,提问作者Mohammed almalki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 10:18:16