setstylesheet interfaz grafica python qt pyqt qpushbutton qstyle

python - interfaz - qt stylesheet



Cambiar icono en cambio de estado con la hoja de estilos Qt (2)

Estoy tratando de apoyar el tema para mi aplicación, y me encuentro con un problema donde tengo que cambiar los iconos según el estado de QPushButton (predeterminado, hover, presionado, etc.). Esto es lo que uso para configurar el icono de un QPushButton:

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

Debido a que el estado de desplazamiento utiliza un fondo que requiere un icono de mi tema oscuro, traté de cambiarlo por el otro usando esto:

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

Cuando hago esto, play_light.png muestra como debería, pero no cambia a play_dark.png en el cambio de estado.

En mi código de Python, el botón de reproducción cambia a un botón de detención en la reproducción, por lo que en mi estilo, configuré ese icono usando una propiedad personalizada:

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

Esto tampoco cambiaría para mí. Entonces, encontré un código en línea para restablecer el estilo del botón, que se ve así:

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

No quiero utilizar esta solución para cada botón por cada cambio de estado. ¿Han encontrado ustedes este problema antes?

Gracias por tu tiempo mirando esto.


Lo averigué. Mantuve los íconos en mi formulario para saber qué íconos iban con cada uno de ellos, pero en mi hoja de estilo, hice algo como esto:

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

Luego en mi vuelo estacionario:

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

Todavía necesito el self.ui.playButton.setStyle(qApp.style()) cuando cambio una propiedad personalizada, pero para todo lo demás, funciona bien.


Establecer qApp.style () no es una buena idea. Pruebe esto (convertir de C ++):

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