PyQt5.QtWidgets.QFrame

Ранее я обращался с вопросом: https://clck.ru/RXRDZ

Решением послужил метод

QFrame.setStyleSheet("border-image: url(image.png);")

Однако теперь я встретился со следующей проблемой: при создании QFrame, в его координатах появляется белый квадрат. Мне бы хотелось этот квадрат убрать и заменить его картинкой.

Сейчас у меня следующий код.

from PyQt5.QtWidgets import QFrame, QApplication
from PyQt5.QtCore import Qt
import sys


class Drawer(QFrame):


    def __init__(self):
        QFrame.__init__(self, None, Qt.FramelessWindowHint | Qt.MSWindowsFixedSizeDialogHint | Qt.WindowStaysOnTopHint)
        self.height = 48
        self.width = 48

        self.setStyleSheet("border-image: url(image.png);")
        self.resize(self.width, self.height)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    drawer = Drawer()
    sys.exit(app.exec_())

Ответы (2 шт):

Автор решения: S. Nick

как вариант:

import sys
from PyQt5 import QtCore, QtWidgets, QtGui


if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv)

    window = QtWidgets.QWidget()
    window.setWindowFlags(QtCore.Qt.Window | 
                          QtCore.Qt.FramelessWindowHint | 
                          QtCore.Qt.WindowStaysOnTopHint)   
    window.setGeometry(200, 200, 100, 100)

    pixmap = QtGui.QPixmap("Ok.png").scaled(100, 100, 
                                            QtCore.Qt.KeepAspectRatio, 
                                            QtCore.Qt.FastTransformation)
    pal = window.palette()
    pal.setBrush(QtGui.QPalette.Normal, QtGui.QPalette.Window, QtGui.QBrush(pixmap))
    pal.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, QtGui.QBrush(pixmap))
    window.setPalette(pal)

    window.setMask(pixmap.mask())

    window.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка
Автор решения: S. Nick

Я вижу, что вам очень нравится виджет QFrame и что вы хотите реализовать вашу задумку используя таблицу стилей. Специально для вас:

import sys
from PyQt5.QtWidgets import QFrame, QApplication, QWidget
from PyQt5.QtCore import Qt


class Drawer(QFrame):
    def __init__(self):
        super().__init__()
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
     
        self.height = 48
        self.width = 48
        self.resize(self.width, self.height)
        
        self.widget = QWidget(self)
        self.widget.resize(self.width, self.height)
        self.widget.setStyleSheet('.QWidget {border-image: url(Ok.png); background: transparent;}')
       
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    drawer = Drawer()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка