PyQt 圆形启动屏幕角
PyQt Round Spalsh Screens Corners
我有一个 PyQt5 启动画面。我想要做的是围绕启动画面本身的角落。但是,当我尝试 splash.setStyleSheet(u"border: 1px solid black; border-radius: 10px;")
时,它会向启动画面内的小部件添加一个圆角边框,而不是启动画面本身。我怎么能拐弯抹角呢
这是我的启动画面的代码:
splash_pix = QtGui.QPixmap('con.png')
splash = QtWidgets.QSplashScreen(splash_pix, Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
splash.resize(700, 700)
splash.setStyleSheet(u"background-color: rgb(71, 71, 71); border: 1px solid black; border-radius: 10px;")
qtRectangle = splash.frameGeometry()
centerPoint = QtWidgets.QDesktopWidget().availableGeometry().center()
qtRectangle.moveCenter(centerPoint)
splash.move(qtRectangle.topLeft())
# adding progress bar
progressBar = QtWidgets.QProgressBar(splash)
progressBar.setGeometry(QtCore.QRect(0, 390, 571, 23))
progressBar.setStyleSheet(u"QProgressBar{\n"
"\n"
"background-color: rgb(98, 114, 164);\n"
"color: rgb(200, 200, 200);\n"
"border-style: none;\n"
"border-radius: 10px;\n"
"text-align: center;\n"
"}\n"
"\n"
"QProgressBar::chunk{\n"
"\n"
" border-radius: 10px;\n"
" background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.943182, y2:0, stop:0 rgba(254, 121, 199, 255), stop:1 rgba(170, 85, 255, 255));\n"
"}")
lodingLbl = QtWidgets.QLabel(splash)
loding_font = QFont()
loding_font.setPointSize(14)
loding_font.setFamily(u"Franklin Gothic Medium")
lodingLbl.setFont(loding_font)
lodingLbl.setStyleSheet("color : rgb(200, 200, 200)")
lodingLbl.setText("STARTING PROGRAM")
lodingLbl.setAlignment(Qt.AlignCenter)
splashLoadingLayout = QtWidgets.QVBoxLayout()
splashLoadingLayout.addStretch()
splashLoadingLayout.addWidget(lodingLbl)
splashLoadingLayout.addWidget(progressBar)
splashLoadingLayout.addStretch()
splashLoadingLayout.setAlignment(Qt.AlignVCenter)
progressBar.setTextVisible(False)
splash.setLayout(splashLoadingLayout)
splash.setMask(splash_pix.mask())
splash.show()
好的,我已经弄明白了。如果初始屏幕只环绕小部件的角落,那么我所要做的就是创建一个主 Qwidget 并将初始屏幕设置为它。然后,我可以使用 splash.setAttribute(Qt.WA_TranslucentBackground)
.
将背景设置为透明
所以,我编辑的是:
splashLoadingLayout = QtWidgets.QVBoxLayout()
splashLoadingLayout.addStretch()
splashLoadingLayout.addWidget(lodingLbl)
splashLoadingLayout.addWidget(progressBar)
splashLoadingLayout.addStretch()
splashLoadingLayout.setAlignment(Qt.AlignVCenter)
progressBar.setTextVisible(False)
newWid = QtWidgets.QWidget()
newWid.setLayout(splashLoadingLayout)
splashPermLayout = QtWidgets.QVBoxLayout()
splashPermLayout.addWidget(newWid)
splash.setLayout(splashPermLayout)
splash.setMask(splash_pix.mask())
splash.show()
但是,标签仍然会有边框。因此,为了禁用它,我在样式表中删除了 border: 1px solid black
以给我:splash.setStyleSheet(u"border-radius: 33px;")
。这解决了所有问题
希望对同样遇到此问题的其他人有所帮助!
我有一个 PyQt5 启动画面。我想要做的是围绕启动画面本身的角落。但是,当我尝试 splash.setStyleSheet(u"border: 1px solid black; border-radius: 10px;")
时,它会向启动画面内的小部件添加一个圆角边框,而不是启动画面本身。我怎么能拐弯抹角呢
这是我的启动画面的代码:
splash_pix = QtGui.QPixmap('con.png')
splash = QtWidgets.QSplashScreen(splash_pix, Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
splash.resize(700, 700)
splash.setStyleSheet(u"background-color: rgb(71, 71, 71); border: 1px solid black; border-radius: 10px;")
qtRectangle = splash.frameGeometry()
centerPoint = QtWidgets.QDesktopWidget().availableGeometry().center()
qtRectangle.moveCenter(centerPoint)
splash.move(qtRectangle.topLeft())
# adding progress bar
progressBar = QtWidgets.QProgressBar(splash)
progressBar.setGeometry(QtCore.QRect(0, 390, 571, 23))
progressBar.setStyleSheet(u"QProgressBar{\n"
"\n"
"background-color: rgb(98, 114, 164);\n"
"color: rgb(200, 200, 200);\n"
"border-style: none;\n"
"border-radius: 10px;\n"
"text-align: center;\n"
"}\n"
"\n"
"QProgressBar::chunk{\n"
"\n"
" border-radius: 10px;\n"
" background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.943182, y2:0, stop:0 rgba(254, 121, 199, 255), stop:1 rgba(170, 85, 255, 255));\n"
"}")
lodingLbl = QtWidgets.QLabel(splash)
loding_font = QFont()
loding_font.setPointSize(14)
loding_font.setFamily(u"Franklin Gothic Medium")
lodingLbl.setFont(loding_font)
lodingLbl.setStyleSheet("color : rgb(200, 200, 200)")
lodingLbl.setText("STARTING PROGRAM")
lodingLbl.setAlignment(Qt.AlignCenter)
splashLoadingLayout = QtWidgets.QVBoxLayout()
splashLoadingLayout.addStretch()
splashLoadingLayout.addWidget(lodingLbl)
splashLoadingLayout.addWidget(progressBar)
splashLoadingLayout.addStretch()
splashLoadingLayout.setAlignment(Qt.AlignVCenter)
progressBar.setTextVisible(False)
splash.setLayout(splashLoadingLayout)
splash.setMask(splash_pix.mask())
splash.show()
好的,我已经弄明白了。如果初始屏幕只环绕小部件的角落,那么我所要做的就是创建一个主 Qwidget 并将初始屏幕设置为它。然后,我可以使用 splash.setAttribute(Qt.WA_TranslucentBackground)
.
所以,我编辑的是:
splashLoadingLayout = QtWidgets.QVBoxLayout()
splashLoadingLayout.addStretch()
splashLoadingLayout.addWidget(lodingLbl)
splashLoadingLayout.addWidget(progressBar)
splashLoadingLayout.addStretch()
splashLoadingLayout.setAlignment(Qt.AlignVCenter)
progressBar.setTextVisible(False)
newWid = QtWidgets.QWidget()
newWid.setLayout(splashLoadingLayout)
splashPermLayout = QtWidgets.QVBoxLayout()
splashPermLayout.addWidget(newWid)
splash.setLayout(splashPermLayout)
splash.setMask(splash_pix.mask())
splash.show()
但是,标签仍然会有边框。因此,为了禁用它,我在样式表中删除了 border: 1px solid black
以给我:splash.setStyleSheet(u"border-radius: 33px;")
。这解决了所有问题
希望对同样遇到此问题的其他人有所帮助!