2017-09-18 2 views
0

Je le code suivant:KeyError lors de la mise stylesheet pour un QFrame

frame = QFrame() 
frame.setStyleSheet('QFrame { border: 1px solid {0}; background: {1}; }'.format(border, background)) 

Mais j'obtiens l'erreur suivante: KeyError: ' border'

J'ai essayé une tonne de variantes et ne peut pas obtenir ce travail. J'essaie de styler le QFrame, mais pas les widgets enfants.

+0

qu'est ce que 'border' et' background'? – eyllanesc

+0

Vous devez traduire '{' et '}', celui-ci fonctionnera. "QFrame {{border: 1px solide {0}; arrière-plan: {1}; }} '. format (bordure, arrière-plan) ' – Sraw

+0

N'importe quelle couleur. Par exemple 'rouge' pour les deux ou' # ff0000'. Si je sors le "QFrame" et les accolades, cela fonctionne, mais applique les styles aux classes enfant – steveo225

Répondre

0

Le problème est qu'il ya une confusion avec un style en utilisant le format, qui est comme suit:

"{key}".format(key=some_key) 

Pour résoudre cela, vous devez utiliser {{, }} comme indiqué ci-dessous:

app = QApplication(sys.argv) 
frame = QFrame() 
border = 6 
background = '#ff0000' 
frame.setStyleSheet("""QFrame{{ border: 1px solid {0}; background: {1}; }}""".format(border, background)) 
frame.show() 
sys.exit(app.exec_()) 
+0

Ah. Ça a du sens. Je me sens stupide maintenant. Cela a corrigé l'erreur clé. J'étais tellement concentré sur les styles que j'ai arrêté de penser aux cordes Python. Cependant, n'a pas résolu mon problème de feuille de style, car il les appliquait toujours aux objets enfants. Je peux juste devoir utiliser le chemin 'setObjectName' – steveo225

+0

@ steveo225 Je pense que c'est un autre problème, si vous montrez plus d'informations que je pourrais continuer à aider, si ma réponse vous aide à ne pas oublier de le marquer comme correct s'il vous plaît. – eyllanesc

+0

@ steveo225 Vous pouvez améliorer votre exemple de code en plaçant des widgets enfants, ainsi qu'une image de ce que vous obtenez et que vous voulez obtenir. – eyllanesc