使用Qt样式表更改状态更改图标

时间:2013-12-13 18:55:49

标签: python qt pyqt qpushbutton qstyle

我正在尝试支持我的应用程序的主题,我遇到了一个问题,我必须根据QPushButton的状态更改图标(默认,悬停,按下等)。这是我用来设置QPushButton图标的方法:

QPushButton#playButton {
    qproperty-icon: url(":/light/icons/play_light.png");
}

因为悬停状态使用的背景需要我黑暗主题中的图标,所以我尝试使用此方法将其更改为另一个:

QPushButton#playButton:hover {
    qproperty-icon: url(":/dark/icons/play_dark.png");
}

当我执行此操作时,play_light.png会按原样显示,但在状态更改时不会更改为play_dark.png

在我的Python代码中,播放按钮在播放时变为停止按钮,所以在我的风格中,我使用自定义属性将其设置为该图标:

QPushButton#playButton[isPlaying="true"] {
    qproperty-icon: url(":/light/icons/stop_light.png");
}

这对我来说也不会改变。所以,我在网上发现了一些代码来重置按钮的样式,如下所示:

self.ui.playButton.setProperty('isPlaying', not isEnable)
self.ui.playButton.setStyle(qApp.style())

我不想对每个单个状态更改的每个单个按钮使用此解决方法。你们之前遇到过这个问题吗?

感谢您抽出时间看这个。

2 个答案:

答案 0 :(得分:1)

设置qApp.style()并不是一个好主意。试试这个(从C ++转换):

button->style()->unpolish(button);
button->style()->polish(button);
button->update();

答案 1 :(得分:0)

想出来。我在我的表单上保留了图标,以便我知道哪些图标去了哪一个,但在我的样式表中,我做了类似的事情:

QPushButton#searchNext {
    qproperty-icon: none;
    image: url(":/light/icons/down_light.png"); 
}

然后我的悬停:

QPushButton#searchNext:hover {
    image: url(":/dark/icons/down_dark.png");   
}

当我更改自定义属性时,我仍然需要self.ui.playButton.setStyle(qApp.style())代码,但对于其他所有内容,这都可以。