Python 使用Qt样式表更改状态时更改图标
我试图为我的应用程序支持主题化,但遇到了一个问题,我必须根据QPushButton的状态(默认、悬停、按下等)更改图标。以下是我用来设置QPushButton图标的内容:Python 使用Qt样式表更改状态时更改图标,python,qt,pyqt,qpushbutton,qstyle,Python,Qt,Pyqt,Qpushbutton,Qstyle,我试图为我的应用程序支持主题化,但遇到了一个问题,我必须根据QPushButton的状态(默认、悬停、按下等)更改图标。以下是我用来设置QPushButton图标的内容: QPushButton#playButton { qproperty-icon: url(":/light/icons/play_light.png"); } 由于悬停状态使用的背景需要我的黑色主题中的图标,因此我尝试使用以下方法将其更改为另一个: QPushButton#playButton:hover {
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())
QPushButton#searchNext {
qproperty-icon: none;
image: url(":/light/icons/down_light.png");
}
我不想将此解决方法用于每次单个状态更改的单个按钮。你们以前遇到过这个问题吗
谢谢你花时间看这个。把它弄明白了。我将图标保留在表单上,以便知道哪些图标指向哪个图标,但在我的样式表中,我做了如下操作:
self.ui.playButton.setProperty('isPlaying', not isEnable)
self.ui.playButton.setStyle(qApp.style())
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())代码,但对于其他所有内容,这都很好。解决了这个问题。我将图标保留在表单上,以便知道哪些图标指向哪个图标,但在我的样式表中,我做了如下操作:
self.ui.playButton.setProperty('isPlaying', not isEnable)
self.ui.playButton.setStyle(qApp.style())
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())代码,但对于其他所有内容,这都很好。设置qApp.style()不是一个好主意。尝试以下方法(从C++转换):
设置qApp.style()不是一个好主意。尝试以下方法(从C++转换):
为什么设置
qApp.style()
是个坏主意?将应用程序范围的样式设置到特定控件会浪费CPU和(可能)内存资源。为什么设置qApp.style()
是个坏主意?将应用程序范围的样式设置到特定控件会浪费CPU和(可能)内存资源内存资源。这是更改背景图像,而不是图标。这是更改背景图像,而不是图标。