這是python中的QrCode生成器,PyQt5模塊qrcode我有一個帶有自己顏色的小部件;
我想將 WHITE COLOR 洗掉為TRANSPARENT或NO COLOR
# importing libraries
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import qrcode
import sys
class Image(qrcode.image.base.BaseImage):
def __init__(self, border, width, box_size):
self.border = border
self.width = width
self.box_size = box_size
size = (width border * 2) * box_size
self._image = QImage(size, size, QImage.Format_RGB16)
# initial image as white
self._image.fill(Qt.white)
def pixmap(self):
return QPixmap.fromImage(self._image)
def drawrect(self, row, col):
painter = QPainter(self._image)
painter.fillRect(
(col self.border) * self.box_size,
(row self.border) * self.box_size,
self.box_size, self.box_size,
QtCore.Qt.black)
class Window(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setGeometry(100, 100, 300, 300)
self.label = QLabel(self)
self.edit = QLineEdit(self)
self.edit.returnPressed.connect(self.handleTextEntered)
self.edit.setFont(QFont('Times', 9))
self.edit.setAlignment(Qt.AlignCenter)
layout = QVBoxLayout(self)
layout.addWidget(self.label)
layout.addWidget(self.edit)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
def handleTextEntered(self):
text = self.edit.text()
qr_image = qrcode.make(text, image_factory = Image).pixmap()
self.label.setPixmap(qr_image)
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
我試過這個,但無濟于事:
self._image.fill(Qt.transparent)
self._image.fill(Qt.'rgba(122, 45, 78, 1)')
self._image.fill(None)
self._image.fill('')
self._image.fill()
# self._image.fill() # to remove the
這些嘗試沒有奏效,......任何想法
uj5u.com熱心網友回復:
我想你可以通過多種方式實作它,對我來說,我主要使用兩種方式來實作它。
# 方法 (1) --> go with Qt.transparentand play Qt.TransparentModewith 0 表示透明,1 表示不透明...
在doc.qt.io 這個頁面上找到更多資訊

# 方法(2)---> 玩弄你的App背景色:
--> 如果你的背景是紅色的,那么設定
self._image.fill(Qt.red),例如:

(忽略我添加的保存按鈕只是為了一些不相關主題的測驗......)
在這種情況下扭曲QtCore.Qt.black到QtCore.Qt.white
def drawrect(self, row, col):
painter = QPainter(self._image)
painter.fillRect(
(col self.border) * self.box_size,
(row self.border) * self.box_size,
self.box_size, self.box_size,
QtCore.Qt.white)
uj5u.com熱心網友回復:
您正在使用不支持透明度的影像格式:
self._image = QImage(size, size, QImage.Format_RGB16)
正如檔案所解釋的:
影像使用 16 位 RGB 格式 (5-6-5) 存盤。
這意味著它是一個標準(并且非常有限)的 3 分量色彩空間,其中通道只有紅色(5 位,32 級)、綠色(6 位,64 級)和藍色(5 位,又是 32 級),并且很明顯沒有阿爾法通道。
由于要求只是能夠顯示和保存影像,所以不需要使用 QImage 并指定格式,QPixmap 肯定更容易和合適,特別是考慮到它原生支持透明度。
class Image(qrcode.image.base.BaseImage):
def __init__(self, border, width, box_size):
self.border = border
self.width = width
self.box_size = box_size
size = (width border * 2) * box_size
self._image = QPixmap(size, size)
self._image.fill(Qt.transparent)
def pixmap(self):
return self._image
def drawrect(self, row, col):
painter = QPainter(self._image)
painter.fillRect(
(col self.border) * self.box_size,
(row self.border) * self.box_size,
self.box_size, self.box_size,
QtCore.Qt.black)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/414856.html
標籤:
上一篇:QMediaDevices::videoInputs()未將OBS虛擬攝像機列為Windows上可用
下一篇:如何將陣列[]的地址存盤在變數中
