pyqtgraph.widgets.VerticalLabel — pyqtgraph 0.11.0rc0 documentation

# Source code for pyqtgraph.widgets.VerticalLabel

    # -*- coding: utf-8 -*-
    from ..Qt import QtGui, QtCore

    __all__ = ['VerticalLabel']
    #class VerticalLabel(QtGui.QLabel):
        #def paintEvent(self, ev):
            #p = QtGui.QPainter(self)
            #p.rotate(-90)
            #self.hint = p.drawText(QtCore.QRect(-self.height(), 0, self.height(), self.width()), QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter, self.text())
            #p.end()
            #self.setMinimumWidth(self.hint.height())
            #self.setMinimumHeight(self.hint.width())

        #def sizeHint(self):
            #if hasattr(self, 'hint'):
                #return QtCore.QSize(self.hint.height(), self.hint.width())
            #else:
                #return QtCore.QSize(16, 50)

    class VerticalLabel(QtGui.QLabel):
        def __init__(self, text, orientation='vertical', forceWidth=True):
            QtGui.QLabel.__init__(self, text)
            self.forceWidth = forceWidth
            self.orientation = None
            self.setOrientation(orientation)

        def setOrientation(self, o):
            if self.orientation == o:
                return
            self.orientation = o
            self.update()
            self.updateGeometry()

        def paintEvent(self, ev):
            p = QtGui.QPainter(self)
            #p.setBrush(QtGui.QBrush(QtGui.QColor(100, 100, 200)))
            #p.setPen(QtGui.QPen(QtGui.QColor(50, 50, 100)))
            #p.drawRect(self.rect().adjusted(0, 0, -1, -1))

            #p.setPen(QtGui.QPen(QtGui.QColor(255, 255, 255)))

            if self.orientation == 'vertical':
                p.rotate(-90)
                rgn = QtCore.QRect(-self.height(), 0, self.height(), self.width())
            else:
                rgn = self.contentsRect()
            align = self.alignment()
            #align  = QtCore.Qt.AlignTop|QtCore.Qt.AlignHCenter

            self.hint = p.drawText(rgn, align, self.text())
            p.end()

            if self.orientation == 'vertical':
                self.setMaximumWidth(self.hint.height())
                self.setMinimumWidth(0)
                self.setMaximumHeight(16777215)
                if self.forceWidth:
                    self.setMinimumHeight(self.hint.width())
                else:
                    self.setMinimumHeight(0)
            else:
                self.setMaximumHeight(self.hint.height())
                self.setMinimumHeight(0)
                self.setMaximumWidth(16777215)
                if self.forceWidth:
                    self.setMinimumWidth(self.hint.width())
                else:
                    self.setMinimumWidth(0)

        def sizeHint(self):
            if self.orientation == 'vertical':
                if hasattr(self, 'hint'):
                    return QtCore.QSize(self.hint.height(), self.hint.width())
                else:
                    return QtCore.QSize(19, 50)
            else:
                if hasattr(self, 'hint'):
                    return QtCore.QSize(self.hint.width(), self.hint.height())
                else:
                    return QtCore.QSize(50, 19)

    if __name__ == '__main__':
        app = QtGui.QApplication([])
        win = QtGui.QMainWindow()
        w = QtGui.QWidget()
        l = QtGui.QGridLayout()
        w.setLayout(l)

        l1 = VerticalLabel("text 1", orientation='horizontal')
        l2 = VerticalLabel("text 2")
        l3 = VerticalLabel("text 3")
        l4 = VerticalLabel("text 4", orientation='horizontal')
        l.addWidget(l1, 0, 0)
        l.addWidget(l2, 1, 1)
        l.addWidget(l3, 2, 2)
        l.addWidget(l4, 3, 3)
        win.setCentralWidget(w)
        win.show()