Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Qt样式表更改状态时更改图标_Python_Qt_Pyqt_Qpushbutton_Qstyle - Fatal编程技术网

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

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的状态(默认、悬停、按下等)更改图标。以下是我用来设置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())
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和(可能)内存资源内存资源。这是更改背景图像,而不是图标。这是更改背景图像,而不是图标。