PyQt中的样式表伪状态语法

2 投票
1 回答
1640 浏览
提问于 2025-04-17 12:32

我在我的脚本中有很多按钮,并且我加载了一个外部的css文件来处理我软件中的各种小部件。现在我需要通过类来查找按钮,并尝试定义一些特定的属性。像这样通用的按钮调用:QFrame:QPushButton #btnName { css: blah; } 是可以工作的,但伪状态却不行,特别是悬停和按下状态。我正在尝试的代码如下:

--THIS WORKS
QFrame:QPushButton #btnName { css: blah; }

--THESE DO NOT
QFrame:QPushButton:hover #btnName { css: hoverstuff; }
QFrame:QPushButton:pressed #btnName { css: pressedstuff; }

这个样式表里有很多css样式;是不是因为这些行“上面”的内容影响了它们?我的伪状态语法是不是写错了?这是怎么回事!?提前谢谢大家。

1 个回答

5

你现在使用的语法在所有例子中都是错误的。

选择器 QFrame:QPushButton 会忽略 :QPushButton,因为它不是一个有效的 伪状态。而且,ID选择器前面的空格意味着这个规则会应用到所有名为 #btnName 的子对象(这可能不是你想要的,但这就是为什么第一个例子看起来有点有效的原因)。

我猜你真正想要的是这个规则应用于任何 QPushButton,并且它的 objectName 是 "btnName",同时它也是 QFrame 的子对象。

在这种情况下,第一个规则应该是:

QFrame QPushButton#btnName { css: blah; }

而另外两个规则应该是:

QFrame QPushButton#btnName:hover { css: hoverstuff; }
QFrame QPushButton#btnName:pressed { css: pressedstuff; }

想了解更多选择器类型的细节,可以查看 这里

撰写回答