2015-03-27 1 views
0

Qt (et donc PyQt) vous permet d'ajouter un fichier QSS (feuille de style Qt) à un QApplication, et un fichier à chaque widget individuel que vous créez. Vous pouvez définir votre feuille de style de l'application avec le code suivant Python/PyQt:Mise en cascade de plusieurs feuilles de style Qt dans une application

# app is a QApplication and styleSheet is a str. 
app.setStyleSheet(styleSheet) 

Cependant, la fonction setStyleSheet() ne vous permet de spécifier un fichier QSS pour le QApplication. Ceci est différent de CSS, qui permet d'appliquer un nombre quelconque de feuilles de style à une seule page Web.

J'écris un programme en PyQt qui permettra des thèmes personnalisables par l'utilisateur. Le programme a un fichier QSS principal, et les thèmes devraient pouvoir contenir des QSS supplémentaires qui seraient en cascade sur le dessus. Cependant, en raison de cette limitation Qt apparente, cela ne semble pas possible.

Une idée à laquelle j'ai pensé est que je pourrais assigner la feuille de style par défaut du programme à QApplication, et la feuille de style du thème actuel à QMainWindow. Cela semble une solution de contournement plutôt qu'une bonne idée, cependant.

Y at-il un bon moyen d'ajouter deux feuilles de style Qt comme ça?

+2

Pourquoi? – ekhumoro

+0

@ekhumoro Est-ce que cela provoquerait que les règles de style dans 'stylesheet2' remplacent celles de' stylesheet1', puisqu'elles arrivent en deuxième position? – RoadrunnerWMC

+0

Ce n'est pas différent du HTML normal, où les feuilles de style sont simplement concaténées ensemble dans l'ordre dans lequel elles apparaissent dans le document. Après cela, les règles standard de spécificité CSS s'appliquent. – ekhumoro

Répondre

2

Vous pouvez faire:

app.setStyleSheet(stylesheet1 + stylesheet2) 

Cela fonctionne même en HTML normale, où les feuilles de style sont simplement concaténés dans l'ordre dans lequel ils apparaissent dans le document. Après cela, les règles standard de spécificité CSS s'appliquent. Pourquoi pas: `app.setStyleSheet (stylesheet1 + stylesheet2)`?