Qt - kann QTable haben Spaltenbeschriftungen um 90 Grad gedreht?
-
01-10-2019 - |
Frage
Ich habe viele schmale Spalten mit sehr langen Etiketten. Ich möchte die Etiketten um 90 Grad drehen. Ist es möglich?
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!