web-dev-qa-db-fra.com

Étiquettes d'en-tête horizontales et verticales PyQt QTableView

en utilisant QTableWidget je peux faire

table = QTableWidget()
table.setHorizontalHeaderLabels(QString("Name;Age;Sex;Add").split(";"))
table.horizontalHeaderItem().setTextAlignment(Qt.AlignHCenter)

comment puis-je faire de même avec QTableView ??

11
Ruchit

Les widgets de table/arborescence/liste sont basés sur des éléments. Les vues de table/arborescence/liste sont basées sur la vue/le modèle (parfois appelées MVC, pour le modèle/la vue/le contrôleur). Dans le système Modèle/Vue, les données sont définies et manipulées sur le modèle et la vue ne fait que l'afficher. Pour utiliser un widget Vue, vous devez également créer une classe de modèle. Dans de nombreux cas, les gens créeront leur propre sous-classe à partir de QAbstractItemModel , mais ce n'est pas obligatoire. Qt fournit un modèle non abstrait que vous pouvez utiliser avec toutes les classes de vue - QStandardItemModel .

model = QStandardItemModel()
model.setHorizontalHeaderLabels(['Name', 'Age', 'Sex', 'Add'])
table = QTableView()
table.setModel(model)

Vous pouvez effectuer l'alignement de deux manières. Les données d'alignement sont réellement prises en charge dans le modèle, mais la vue d'en-tête vous permet de définir une valeur par défaut (je suppose qu'elle l'utilise si les données d'alignement ne sont pas définies dans le modèle)

header = table.horizontalHeader()
header.setDefaultAlignment(Qt.AlignHCenter)

Pour obtenir encore plus de contrôle, vous pouvez définir les données d'alignement directement sur le modèle.

# Sets different alignment data just on the first column
model.setHeaderData(0, Qt.Horizontal, Qt.AlignJustify, Qt.TextAlignmentRole)

Mais la puissance du système Vue/Modèle est que la vue peut choisir d'afficher les données du modèle de la manière souhaitée. Si vous souhaitez créer votre propre vue personnalisée, vous pouvez avoir un contrôle absolu sur la façon dont le texte de chaque colonne est aligné et affiché.

27
Brendan Abel