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_())
дайте мне знать, если у вас возникнут проблемы.