Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1196 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  [PyQt][résolu] Style dynamique

 


 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PyQt][résolu] Style dynamique

n°2353091
man-x69
Posté le 02-05-2020 à 17:03:21  profilanswer
 

Bonjour,
 
J'ai toujours mon projet de mediacenter avec une raspi et un écran LCD qui n'a pas l'air de passionner les foules :o.
 
Il se trouve que des couleurs claires sont très bien quand il fait jour, mais pètent les yeux pendant la nuit, et que des couleurs sombres ([:gandalf-ze-wizard]) fonctionnent bien la nuit mais on ne voit rien pendant la journée. De façon pratique, ça colle avec le moment où la lumière est allumée.
 
Est-ce qu'il y a un moyen de changer de feuilles de styles en fonction d'une variable, mais sans redémarrer le programme?
 
Le code contient juste ce bloc dans l'initialisation de la classe du QWidget parent d'à peu près tout.

Code :
  1. style = QtCore.QFile(config.STYLESHEET)
  2. style.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text)
  3. self.setStyleSheet(QtCore.QTextStream(style).readAll())
  4. style.close()


 
Si je le rajoute ailleurs (en cliquant sur un bouton par exemple), ça applique bien la feuille de style au QWidget parent, mais pas à tout ce qui est inclu dedans.
 
Jour [:dracospina:1] :
http://www.monorailc.at/data/galleries/2020_dashboard/uit17_light.png
Nuit [:simi37:4] :
http://www.monorailc.at/data/galleries/2020_dashboard/uit17_dark.png
Bâtard :
http://www.monorailc.at/data/galleries/2020_dashboard/uit17_fail.png
 
Comment puis-je faire?


Message édité par man-x69 le 03-05-2020 à 16:26:17

---------------
Monorailcat iz ohverin
mood
Publicité
Posté le 02-05-2020 à 17:03:21  profilanswer
 

n°2353127
citation
Posté le 03-05-2020 à 12:31:07  profilanswer
 

Tout d'abord, bravo pour ton projet :jap:
 
j'ai fait un peu de python, mais qt je ne connais pas, donc je vais surement dire des bêtises :o
tu as bien 2 fichiers css ou qss distincts pour chaque theme ?
quel est le code exact quand tu testes avec un bouton ?

n°2353137
man-x69
Posté le 03-05-2020 à 14:20:58  profilanswer
 

citation a écrit :

Tout d'abord, bravo pour ton projet :jap:

 

j'ai fait un peu de python, mais qt je ne connais pas, donc je vais surement dire des bêtises :o
tu as bien 2 fichiers css ou qss distincts pour chaque theme ?
quel est le code exact quand tu testes avec un bouton ?

 

En fait je réutilise des boutons existants qui appellent un simple copier/coller du code plus haut.

 

En effet, j'ai deux fichiers css distincts :jap:.

 

Je pense que la feuille de style est appellée pour la première fois avant que le reste des classes ne soient instanciées, du coup le style s'applique sur tout ce qui va être instancié. Quand je clique sur le bouton pour changer de couleur, ça ne s'applique que sur le QWidget en question.


Message édité par man-x69 le 03-05-2020 à 14:23:57

---------------
Monorailcat iz ohverin
n°2353140
citation
Posté le 03-05-2020 à 14:56:00  profilanswer
 

dans ton copié collé, si tu remplaces self par le nom de ton widget principal ça fait quoi ?
 
edit : a quel moment tu changes config.STYLESHEET ?

Message cité 1 fois
Message édité par citation le 03-05-2020 à 14:57:20
n°2353142
man-x69
Posté le 03-05-2020 à 15:07:48  profilanswer
 

citation a écrit :

dans ton copié collé, si tu remplaces self par le nom de ton widget principal ça fait quoi ?
 
edit : a quel moment tu changes config.STYLESHEET ?


 
self est le QWidget principal :o.
 
Mais oui, ça fonctionne si j'applique le stylesheet à chaque widgets un par un (y-compris les boutons et les zones de texte :o).
C'est possible, mais pas vraiment réaliste ni modulable.
 
En fait sur les boutons, j'ai remplacé config.STYLESHEET par le nom du fichier en dur. C'est moche, mais c'est juste pour tester.


---------------
Monorailcat iz ohverin
n°2353143
citation
Posté le 03-05-2020 à 15:18:27  profilanswer
 

ok pour le self :whistle:  
 
de ce que j'ai compris, tu peux définir une fonction dans ton qwidget principal
cette fonction (que tu peux appeler set_theme par exemple) doit avoir pour paramètre un nom_de_fichier
et c'est dans cette fonction que tu fais ton setStyleSheet, avec style = QtCore.QFile(nom_de_fichier)
 
puis tu pourras appeler cette fonction depuis n'importe quel widget, avec en paramètre le nom du css voulu
 
si l'anglais ne te rebutes pas, j'ai lu ça ici :
https://stackoverflow.com/questions [...] qt-widgets

n°2353150
man-x69
Posté le 03-05-2020 à 16:21:45  profilanswer
 

citation a écrit :

ok pour le self :whistle:

 

de ce que j'ai compris, tu peux définir une fonction dans ton qwidget principal
cette fonction (que tu peux appeler set_theme par exemple) doit avoir pour paramètre un nom_de_fichier
et c'est dans cette fonction que tu fais ton setStyleSheet, avec style = QtCore.QFile(nom_de_fichier)

 

puis tu pourras appeler cette fonction depuis n'importe quel widget, avec en paramètre le nom du css voulu

 

C'est à peu près ça, j'ai une classe principale qui contient le QWidget principal, quelques sous-QWidgets et des fonctions pour faire fonctionner le bouzin (boutons, touches de clavier). La fonction qui applique les feuilles de style est dans cette classe.
Ce qui n'est pas indispensable dans la classe principale est dégagé dans d'autres classes qui sont dans d'autres fichiers.

 
citation a écrit :

si l'anglais ne te rebutes pas, j'ai lu ça ici :
https://stackoverflow.com/questions [...] qt-widgets

 

Merci :jap:.

 

En fait il fallait appliquer le style sur le QApplication au lieu du QWidget parent, là ça fonctionne (ça pète d'autres trucs, mais c'est un détail :o).

 

Je ne serais pas allé loin si je m'étais limité à la doc en Français, en oubliant les forums de Qt et stackoverflow :o.


Message édité par man-x69 le 03-05-2020 à 16:26:53

---------------
Monorailcat iz ohverin

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  [PyQt][résolu] Style dynamique

 

Sujets relatifs
Style à toutes les balises x qui ne sont pas dans une balise yhtml style recursif
[PyQt] Marges entre des QWidgets[EXCEL] Somme dynamique
[PyQt] Inclusion d'un programme dans une UIExercice de style XML/XSLT
Créer une carte dynamiqueModifier dynamiquement le style inline et la classe d'un div
Feuille de style CSS non prise en compteFpdf récupération tableau dynamique
Plus de sujets relatifs à : [PyQt][résolu] Style dynamique


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR