2015-09-08 2 views
0

je générer un GridLayout et l'ajout de widgets comme suit:PyQt - QGridLayout réglé première rangée feuille de style

elements = QGroupBox() 
    self.grid = QGridLayout(elements) 

    #Arrange Row Elements 
    self.grid.addWidget(subjectName, 0, 0) 
    self.grid.addWidget(statusName, 0, 1) 

Je souhaite avoir un pour couleur de fond la première rangée (pas les Widgets l'intérieur de la rangée), pour indiquer l'en-tête de la grille.

Résultat je veux: enter image description here

+0

Cela ressemble vous essayez de faire ce qu'un 'QTableWidget' est mieux adapté pour, ou' QTableView'. Si vous définissez l'arrière-plan des widgets dans un QGridLayout, cela dépend du widget ... vous pouvez le faire avec 'setStyleSheet' pour chacun de ces widgets. – phyatt

+0

http://www.qtcentre.org/threads/24233-QTableWidget-change-header-background-color-QHeaderView – phyatt

+0

Est-il possible d'ajouter des widgets à QTableView? – user1767754

Répondre

2

Vous pouvez utiliser les propriétés QObjects de distinguer entre les cellules lors de la mise une feuille de style.

Il est possible d'utiliser par ex.

setProperty("coloredcell", true) 

sur le widget ajouté à la QGridLayout en combinaison avec

parentWidget.setStyleSheet("*[coloredcell=\"true\"] {background-color:rgb(" + QString::number((rand() % 255)) + "," + QString::number((rand() % 255)) + "," + QString::number((rand() % 255)) + ");}"); 

où le parentWidget est le Widget contenant le QGridLayout. Pour avoir la couleur d'arrière-plan dans la plage complète d'une seule cellule, vous devez ajouter un QWidget intermédiaire à QGridLayout, définir la propriété, ajouter une mise en page intermédiaire au QWidget intermédiaire et y ajouter votre widget. vouloir voir dans le tableau. Sans le widget intermédiaire, si vous définissez la propriété "coloredcell" sur le widget lui-même (dans mon exemple, QPushButton), seule la couleur de fond de ce widget sera modifiée, pas la couleur de la cellule QGridLayout entière. C'est pourquoi nous en avons besoin.

Exemple de code (non testé):

widget = QWidget() 
gridLayout = QGridLayout(widget) 
for i in range(0,3): 
    for j in range(0,3): 
     intermediateWidget = QWidget(widget) 
     intermediateWidget.setProperty("coloredcell", true) 
     intermediateLayout = QGridLayout(intermediateWidget) 
     button = QPushButton(QString("Row %1 Col %2").arg(i).arg(j)) 
     gridLayout.addWidget(intermediateWidget, i, j) 

widget.setStyleSheet("*[coloredcell=\"true\"] {background-color:rgb(255,0,0);}") 
widget.show() 
+0

Comment cela est-il couvert en pyqt? – user1767754

+0

Voici comment cela fonctionne en C++, je l'ai testé moi-même. Je l'ai "traduit" en python pour le manque que je n'ai pas installé de pyqt sur la machine que j'utilise pour le moment. Quel est le problème exactement? – Gombat

+0

cela va définir l'arrière-plan pour le widget, mais pas la cellule droite? – user1767754