2 votes

PyQt4-PySide - Formatage d'un widget de tableau

Dans le code suivant, je voudrais utiliser un séparateur de règle plus épais entre la colonne 2 et 3 par exemple. Comment puis-je y parvenir ?

#! /usr/bin/env python2.7
# -*- coding: utf-8 -*-

import sys

from PySide import QtCore, QtGui

class MainWindow(QtGui.QWidget):
    def __init__(
        self,
        parent = None
    ):
        super(MainWindow, self).__init__(parent)

# General grid
        self.table = QtGui.QTableWidget(self)
        self.nbrow, self.nbcol = 9, 9
        self.table.setRowCount(self.nbrow)
        self.table.setColumnCount(self.nbcol)

# Each cell has dimension 50 pixels x 50 pixels
        for row in range(0, self.nbrow):
            self.table.setRowHeight(row, 50)

            for col in range(0, self.nbcol):
                self.table.setColumnWidth(col, 50)

# Each cell contains one single QTableWidgetItem
        for row in range(0, self.nbrow):
            for col in range(0, self.nbcol):
                item = QtGui.QTableWidgetItem()
                item.setTextAlignment(
                    QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter
                )

                self.table.setItem(row, col, item)

# Header formatting
        font = QtGui.QFont()
        font.setFamily(u"DejaVu Sans")
        font.setPointSize(12)
        self.table.horizontalHeader().setFont(font)
        self.table.verticalHeader().setFont(font)

# Font used
        font = QtGui.QFont()
        font.setFamily(u"DejaVu Sans")
        font.setPointSize(20)
        self.table.setFont(font)

# Global Size
        self.resize(60*9, 60*9 + 20)

# Layout of the table
        layout = QtGui.QGridLayout()
        layout.addWidget(self.table, 0, 0)
        self.setLayout(layout)

# Set the focus in the first cell
        self.table.setFocus()
        self.table.setCurrentCell(0, 0)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    fen = MainWindow()
    fen.show()
    sys.exit(app.exec_())

0voto

Luke Points 4250

Vous pouvez utiliser des feuilles de style pour modifier le style des bordures des cellules. Voir les exemples :

0voto

EL_DON Points 608

Ce n'est pas une solution complète ou idéale, mais elle est assez pertinente et pourrait être utile pour progresser. J'ai trouvé un exemple de modification de la bordure d'une cellule entière dans Qt et je l'ai traduit dans PyQt.

Tout d'abord, créez un délégué et modifiez sa méthode de peinture pour effectuer la personnalisation que vous souhaitez.

class TableBorderDelegate(QtGui.QItemDelegate):
    """Delegate for customizing cell borders"""

    def paint(self, painter, option, index):
        """Overrides paint to put a red border around cells in column 3"""
        if index.column() == 3:  # index.row() is also a thing
            painter.setPen(QtGui.QColor(255, 0, 0))
            painter.drawRect(option.rect)
        QtGui.QItemDelegate.paint(self, painter, option, index)
    # End of class TableBorderDelegate

Et puis dans votre table

delegate = TableBorderDelegate()
self.table.setItemDelegate(delegate) 

self.table est une instance de QtGui.QTableWidget()

La solution Qt vient de https://stackoverflow.com/a/7264248/6605826 . J'ai trouvé un exemple pyqt d'utilisation de délégué dans https://github.com/baoboa/pyqt5/blob/master/examples/itemviews/spinboxdelegate.py Un délégué pyqt sans rapport

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X