PyQt5 установить фон Mainwindow прозрачным

Я пытаюсь сделать верхнюю границу моего приложения полупрозрачной (закругленные края), используя частично прозрачный PNG ниже:

занятый кот

Это не работает и заканчивается заполнением углов при запуске приложения. Упрощенный код ниже:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.setEnabled(True)
        MainWindow.resize(819, 682)
        MainWindow.setMinimumSize(QtCore.QSize(819, 682))
        MainWindow.setMaximumSize(QtCore.QSize(819, 682))
        MainWindow.setWindowOpacity(1.0)
        MainWindow.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.TopBarFrame = QtWidgets.QFrame(self.centralWidget)
        self.TopBarFrame.setGeometry(QtCore.QRect(-1, -1, 821, 31))
        self.TopBarFrame.setStyleSheet("background-image:url(\"TopBar.png\")")
        self.TopBarFrame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.TopBarFrame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.TopBarFrame.setObjectName("TopBarFrame")
        MainWindow.setCentralWidget(self.centralWidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

С использованием .setAttribute(QtCore.Qt.WA_TranslucentBackground) только делает все окно черным. Вся помощь приветствуется.

0 ответов

Почему вы используетеMainWindow.setWindowOpacity(1.0)? Это полностью меняет окно, а также всю непрозрачность (прозрачность) виджета. И если вам нужен круглый угол, не используйте изображение, просто напишитеborder-radius:10px;(например) это сделайте то же самое.MainWindow.setAttribute(QtCore.Qt.WA_TranslucentBackground) работает, если вы установили окно без рамки (без полей), в противном случае появляется просто черный экран.После некоторых изменений в вашем коде это окончательный результат

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.setEnabled(True)
        MainWindow.resize(819, 682)
        MainWindow.setMinimumSize(QtCore.QSize(819, 682))
        MainWindow.setMaximumSize(QtCore.QSize(819, 682))
        MainWindow.setWindowFlags(
                    QtCore.Qt.FramelessWindowHint 
                  | QtCore.Qt.WindowStaysOnTopHint )
        MainWindow.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.TopBarFrame = QtWidgets.QFrame(self.centralWidget)
        self.TopBarFrame.setGeometry(QtCore.QRect(-1, -1, 821, 31))
        self.TopBarFrame.setStyleSheet('''background:red;
        border-top-left-radius:15px;
        border-top-right-radius:15px;''')
        self.TopBarFrame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.TopBarFrame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.TopBarFrame.setObjectName("TopBarFrame")
        MainWindow.setCentralWidget(self.centralWidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

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

Другие вопросы по тегам