В настоящее время я использую PyQt4 и qrcode4.0.4.
from PyQt4 import QtGui, QtCore
from PIL.ImageQt import ImageQt
import qrcode
class QRLabel(QtGui.QLabel):
def __init__(self, text=""):
super(QRLabel, self).__init__()
self.setCode(text)
def setCode(self, text=""):
self.text = text
qrImg = qrcode.make(text)
imgQt = ImageQt(qrImg.convert("RGB")) # keep a reference!
pixm = QtGui.QPixmap.fromImage(imgQt)
self.setPixmap(pixm.scaled(self.size(),QtCore.Qt.KeepAspectRatio))
Как видите, есть несколько препятствий, которые необходимо преодолеть, прежде чем вы получите изображение на экране. QR-код начинается как изображение RGBA PIL, затем преобразуется в RGB, затем в объект PIL ImageQt, затем в QPixmap, который затем помещается на QLabel с исправлением масштабирования.
Если вы явно не сохраните ссылку imgQt, вы получите мусор при загрузке виджета.
Мой вопрос: могу ли я что-нибудь сделать, чтобы улучшить это, поскольку кажется, что задействовано так много конверсий.