def CreateQRMatrix(dataToEncode, errLevel=QRErrorCorrectLevel.L): dataLen = len(dataToEncode) baseSz = 4 if errLevel == QRErrorCorrectLevel.L else \ 5 if errLevel == QRErrorCorrectLevel.M else \ 6 if errLevel == QRErrorCorrectLevel.Q else \ 7 # errLevel = QRErrorCorrectLevel.H sz = baseSz if dataLen < 70 else 5 + (dataLen - 70) / 30 qrmtrx = [[]] while sz<20: try: errCorrectEnum = getattr(QRErrorCorrectLevel, errLevel.upper()) qr = QRCode(sz, errCorrectEnum) qr.addData(dataToEncode) qr.make() success=True break except TypeError: sz += 1 if not success: LOGERROR('Unsuccessful attempt to create QR code') LOGERROR('Data to encode: (Length: %s, isAscii: %s)', \ len(dataToEncode), isASCII(dataToEncode)) return [[0]], 1 qrmtrx = [] modCt = qr.getModuleCount() for r in range(modCt): tempList = [0]*modCt for c in range(modCt): # The matrix is transposed by default, from what we normally expect tempList[c] = 1 if qr.isDark(c,r) else 0 qrmtrx.append(tempList) return [qrmtrx, modCt]
def setAsciiData(self, newAscii, prefSize=160, errLevel=QRErrorCorrectLevel.L, repaint=True): if len(newAscii) == 0: self.qrmtrx = [[0]] self.modCt = 1 self.pxScale = 1 return self.theData = newAscii sz = 3 success = False while sz < 20: try: self.qr = QRCode(sz, errLevel) self.qr.addData(self.theData) self.qr.make() success = True break except TypeError: sz += 1 if not success: LOGERROR('Unsuccessful attempt to create QR code') self.qrmtrx = [[0]] return self.qrmtrx = [] self.modCt = self.qr.getModuleCount() for r in range(self.modCt): tempList = [0] * self.modCt for c in range(self.modCt): tempList[c] = 1 if self.qr.isDark(r, c) else 0 self.qrmtrx.append(tempList) self.setPreferredSize(prefSize)