Avatar ·

PyQt5 Окно с прозрачным фоном

📁 python, пример, работа

Хочу создать окно, которое имеет прозрачный фон внутри.

Перегуглил все варианты. Получаю неизменно черный фон. Вариант с прозрачностью всего окна работает, но не устраивает, так как нужны хорошо видимые рамки окна и пустота внутри.

Пример кода:

from PyQt5.QtWidgets import QApplication, QWidgetfrom PyQt5 import QtCoreclass Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        self.setGeometry(300, 300, 300, 220)        self.setWindowTitle('Example')        self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)if __name__ == '__main__':    import sys    app = QApplication(sys.argv)    ex = Example()    ex.show()    sys.exit(app.exec_())
Avatar ·

Я знаю простой и сложный варианты.

Простой через прозрачность всего виджета:

import sysfrom PyQt5.QtWidgets import QApplication, QWidgetclass Example(QWidget):    def __init__(self):        super().__init__()        self.setWindowTitle('Example')        self.setGeometry(300, 300, 300, 220)        self.setWindowOpacity(0.6)if __name__ == '__main__':    app = QApplication(sys.argv)    w = Example()    w.show()    sys.exit(app.exec_())


через удаление рамки окна и отрисовки ее вручную рамки, а еще и логики перемещения окна через клик:

import sysfrom PyQt5.QtWidgets import QApplication, QWidgetfrom PyQt5 import QtGuifrom PyQt5.QtCore import Qt, QPointclass Example(QWidget):    def __init__(self):        super().__init__()        self.setWindowTitle('Example')        self.setGeometry(300, 300, 300, 220)        self.setAttribute(Qt.WA_TranslucentBackground, True)        self.setWindowFlags(Qt.FramelessWindowHint)        self.press = False        self.last_pos = QPoint(0, 0)    def mouseMoveEvent(self, event):        if self.press:            self.move(event.globalPos() - self.last_pos)    def mousePressEvent(self, event):        if event.button() == Qt.LeftButton:            self.press = True        self.last_pos = event.pos()    def mouseReleaseEvent(self, event):        if event.button() == Qt.LeftButton:            self.press = False    def paintEvent(self, event: QtGui.QPaintEvent):        painter = QtGui.QPainter(self)        painter.setPen(QtGui.QPen(Qt.black, 50))        painter.drawRect(self.rect())if __name__ == '__main__':    app = QApplication(sys.argv)    w = Example()    w.show()    sys.exit(app.exec_())

Войдите чтобы оставить ответ

Блоги