Frage

Ich habe viele schmale Spalten mit sehr langen Etiketten. Ich möchte die Etiketten um 90 Grad drehen. Ist es möglich?

War es hilfreich?

Lösung

Sie haben wahrscheinlich zu Unterklasse QTableWidgetItem und Ihre eigenen vertikalen Text implementieren Gemälde. Dann setHorizontalHeaderItem() auf dem Tisch zu deuten auf eine Instanz der neuen Widget verwenden.

Andere Tipps

Wenn auf diese Fragen eine Antwort suchen ich viele Hinweise gefunden, aber keine wirkliche Antwort. Die Hinweise sagen, eine QHeaderView Unterklasse und wieder implementieren paintSection. Als ich versuchte, so in PyQt4 zu tun und versuchte paintSection von Grund auf, im Anschluss an die Quelle von QHeaderView zu implementieren, war ich nicht erfolgreich. Um jedoch den Maler Instanz einfaches Drehen und Einstellen aller Größenhinweise erfolgreich war. Der Code funktioniert für horizontale Header nur und ist schön kompakt:

from PyQt4 import QtGui, QtCore

class RotatedHeaderView( QtGui.QHeaderView ):
    def __init__(self, orientation, parent=None ):
        super(RotatedHeaderView, self).__init__(orientation, parent)
        self.setMinimumSectionSize(20)

    def paintSection(self, painter, rect, logicalIndex ):
        painter.save()
        # translate the painter such that rotate will rotate around the correct point
        painter.translate(rect.x()+rect.width(), rect.y())
        painter.rotate(90)
        # and have parent code paint at this location
        newrect = QtCore.QRect(0,0,rect.height(),rect.width())
        super(RotatedHeaderView, self).paintSection(painter, newrect, logicalIndex)
        painter.restore()

    def minimumSizeHint(self):
        size = super(RotatedHeaderView, self).minimumSizeHint()
        size.transpose()
        return size

    def sectionSizeFromContents(self, logicalIndex):
        size = super(RotatedHeaderView, self).sectionSizeFromContents(logicalIndex)
        size.transpose()
        return size

Ich habe ein benutzerdefiniertes Skript gemacht, die gut funktioniert auf der Grundlage frühere Antwort ..

kopieren und den nächsten Code in einer rotated.py Datei einfügen

#!/usr/bin/env python

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class RotatedHeaderView(QHeaderView):
    def __init__(self, parent=None):
        super(RotatedHeaderView, self).__init__(Qt.Horizontal, parent)
        self.setMinimumSectionSize(20)

    def paintSection(self, painter, rect, logicalIndex ):
        painter.save()
        # translate the painter such that rotate will rotate around the correct point
        painter.translate(rect.x()+rect.width(), rect.y())
        painter.rotate(90)
        # and have parent code paint at this location
        newrect = QRect(0,0,rect.height(),rect.width())
        super(RotatedHeaderView, self).paintSection(painter, newrect, logicalIndex)
        painter.restore()

    def minimumSizeHint(self):
        size = super(RotatedHeaderView, self).minimumSizeHint()
        size.transpose()
        return size

    def sectionSizeFromContents(self, logicalIndex):
        size = super(RotatedHeaderView, self).sectionSizeFromContents(logicalIndex)
        size.transpose()
        return size

importiert aus Ihrer main.py Datei diese Klasse mit dieser Zeile:

from rotated import RotatedHeaderView

und führen Sie die Aktionen mit dieser Zeile:

self.YourTableName.setHorizontalHeader(RotatedHeaderView(self.YourTableName))

Hoffnung ist es wert!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top