全局和局部 PyQt5 样式 sheet

Global and local PyQt5 style sheet

全球sheet:

QPushButton {
    border-radius: 20px;    
    font: 57 18pt "Ubuntu Medium";
    color: rgb(255, 255, 255);
    background-color: rgb(255, 0, 0);
}

QPushButton:hover {
    background-color: rgb(166, 0, 0);
}

QPushButton:pressed {
    background-color: rgb(9, 153, 131);
}

pushButton_4 {
    background-color: rgb(85, 170, 0);
}

本地 sheet:

background-color: rgb(0, 229, 115);

我想在相同 window 中创建不同颜色的按钮,但具有相同的悬停效果。但是当我在局部 css table 中更改颜色时,此按钮的全局 window table 被取消,反之亦然。

通用样式表通常适用于简单的情况,但每当 parent/propagation 发挥作用时,应避免使用它们,而应使用显式 selectors.

在你的情况下,问题是使用 generic 样式表,它会覆盖 any 其他先前设置的 属性,因为该语法优先(在 conflict resolution 上阅读更多内容)。

使用 class 选择器是不够的,因为它会以类似的方式完全覆盖任何其他属性,所以解决方案是指定 opposite 您想要使用的内容 (:hover) 通过 否定 它:

QPushButton:!hover {
    background-color: rgb(0, 229, 115);
}

请注意,以下方法也有效,但通常在任何情况下都最好使用选择器(主要是为了保持良好的实践和一致性,这样您在尝试在父小部件上执行此操作时就不会面临意外结果的风险):

:!hover {
    background-color: rgb(0, 229, 115);
}