如何在PyQt5中将主窗口背景设置为Base64图像

2024-09-30 00:30:01 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有一种方法可以将base64代码设置为QMainWindow的后台。我不想保存这些图像,但我只想将它们设置为背景

这是我用来将base64代码转换为QPixmap的代码:

bkgnd = QtGui.QPixmap(QtGui.QImage.fromData(base64.b64decode('some base64 code')))

对于一些base64代码,它可以如下所示:

bkgnd = QtGui.QPixmap(QtGui.QImage.fromData(base64.b64decode('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAeElEQVQ4T2NkoBAwUqifgboGzJy76AIjE3NCWmL0BWwumzV/qcH/f38XpCfHGcDkUVwAUsDw9+8GBmbmAHRDcMlheAGbQnwGYw0DZA1gp+JwFUgKZyDCDQGpwuIlrGGAHHAUGUCRFygKRIqjkeKERE6+oG5eIMcFAOqSchGwiKKAAAAAAElFTkSuQmCC')))

我已经搜索了如何将QPixmap设置为窗口背景,但没有找到任何有效的方法


Tags: 方法代码图像codesome后台背景base64
1条回答
网友
1楼 · 发布于 2024-09-30 00:30:01

没有直接的方法可以做到这一点,因此您需要实现主窗口的绘制事件,并确保其中心小部件不会绘制其背景(通过在样式表中设置背景颜色或使用autoFillBackground()

以下内容将在中心渲染pixmap:

class Win(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.setCentralWidget(QtWidgets.QWidget())
        self.bkgnd = QtGui.QPixmap # base64 data ...

    def paintEvent(self, event):
        qp = QtGui.QPainter(self)
        pmRect = self.bkgnd.rect()
        pmRect.moveCenter(self.centralWidget().geometry().center())
        qp.drawPixmap(pmRect, self.bkgnd)

您还可以获得平铺

    def paintEvent(self, event):
        qp = QtGui.QPainter(self)
        qp.fillRect(self.centralWidget().geometry(), QtGui.QBrush(self.bkgnd))

拉伸图像内容:

    def paintEvent(self, event):
        qp = QtGui.QPainter(self)
        qp.drawPixmap(self.centralWidget().geometry(), self.bkgnd)

或通过保持纵横比进行缩放:

    def paintEvent(self, event):
        qp = QtGui.QPainter(self)
        rect = self.centralWidget().geometry()
        scaled = self.bkgnd.scaled(rect.size(), QtCore.Qt.KeepAspectRatio)
        pmRect = scaled.rect()
        pmRect.moveCenter(rect.center())
        qp.drawPixmap(pmRect, scaled)

在上述所有情况下,如果您想设置在菜单、工具栏等下也呈现的背景,也可以尝试使用主窗口(self.rect())的完整矩形,而不是中央小部件的矩形,但我不建议您这样做,因为这可能会使这些元素难以看到,在任何情况下,也有可能某些样式会绘制它们的背景

相关问题 更多 >

    热门问题