Python 设置QMainWindow的样式表覆盖QWidget
我在PyQt5中制作了自己的进度条,这是一个QWdiget:Python 设置QMainWindow的样式表覆盖QWidget,python,pyqt5,Python,Pyqt5,我在PyQt5中制作了自己的进度条,这是一个QWdiget: class ProgressBar(QWidget): def __init__(self, parent): super(ProgressBar, self).__init__(parent) self.percentage = 0 #self.setGeometry(200, 200, 120, 120) self.label = La
class ProgressBar(QWidget):
def __init__(self, parent):
super(ProgressBar, self).__init__(parent)
self.percentage = 0
#self.setGeometry(200, 200, 120, 120)
self.label = Label(str(round(self.percentage * 100 / 360, 2)) + " %")
self.layout = QVBoxLayout(self)
self.layout.addWidget(self.label)
def paintEvent(self, event):
rectangle = QRect()
rectangle.setX(10)
rectangle.setY(10)
rectangle.setWidth(100)
rectangle.setHeight(100)
gradient = QConicalGradient()
gradient.setColorAt(0, QColor(5, 44, 50))
gradient.setColorAt(1, QColor(178, 255, 246))
gradient.setCenter(rectangle.center())
gradient.setAngle(180 + self.width)
pen = QPen()
pen.setBrush(QBrush(gradient))
pen.setWidth(self.width)
pen.setCapStyle(Qt.RoundCap)
painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing)
painter.setPen(pen)
painter.drawArc(rectangle, 180 * 16, self.angle*16)
...
当我在QMainWindow中添加它时,它的某些部分被我使用self.styleSheet设置为QMainWindow的颜色所覆盖。如果我评论这一行,背景是白色的,小部件不再被覆盖。如何更改此行为并设置背景色而不覆盖此内容?
我是这样添加的:
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setMinimumSize(660, 400)
self.progress_bar = ProgressBar(self)
self.setCentralWidget(self.progress_bar)
self.setWindowFlag(Qt.FramelessWindowHint)
self.setFocusPolicy(Qt.StrongFocus)
self.setStyleSheet("background-color: rgb(80, 90, 10)")
代码中有两个主要问题:
class MainWindow(QMainWindow):
def __init__(self):
# ...
self.setStyleSheet("QMainWindow {background-color: rgb(80, 90, 10);}")
一般来说,应该避免使用“匿名”样式表,尤其是在父窗口小部件上,甚至在顶级窗口中设置时。阅读文档中的更多信息。如何将进度条添加到主窗口?您使用的样式表是什么?请提供。更新代码,抱歉误解。发布示例时,请确保它们实际上是可复制的。您的代码具有未知或键入错误的类名(
Label
),self.width
应使用self.width()
(是QWidget标准属性,您不应覆盖它),self.angle
从不声明。