代码之家  ›  专栏  ›  技术社区  ›  Jubal

PyQT:旋转QLabel,使其处于对角位置而不是水平位置

  •  2
  • Jubal  · 技术社区  · 14 年前

    非常感谢!

    2 回复  |  直到 14 年前
        1
  •  4
  •   Ivo    14 年前

    QLabel 不会这样做。但您可以轻松创建自己的小部件,其中包含一些文本:

    class MyLabel(QtGui.QWidget):
        def paintEvent(self, event):
            painter = QtGui.QPainter(self)
            painter.setPen(QtCore.Qt.black)
            painter.translate(20, 100)
            painter.rotate(-90)
            painter.drawText(0, 0, "hellos")
            painter.end()
    

    QGraphicsView ,您就可以自由地映射真正的小部件(即 QLabel公司

        2
  •  2
  •   Controlix    10 年前

    我用这篇文章提出了另一个我认为可能更好的解决方案。在这里:

    class VerticalLabel(QLabel):
    
        def __init__(self, *args):
            QLabel.__init__(self, *args)
    
        def paintEvent(self, event):
            QLabel.paintEvent(self, event)
            painter = QPainter (self)
            painter.translate(0, self.height()-1)
            painter.rotate(-90)
            self.setGeometry(self.x(), self.y(), self.height(), self.width())
            QLabel.render(self, painter)
    
        def minimumSizeHint(self):
            size = QLabel.minimumSizeHint(self)
            return QSize(size.height(), size.width())
    
        def sizeHint(self):
            size = QLabel.sizeHint(self)
            return QSize(size.height(), size.width())
    
        3
  •  1
  •   Denis Sidorenkov    5 年前

    试试这个

    class myStyle(QCommonStyle):
    
        def __init__(self, angl=0, point=QPoint(0, 0)):
            super(myStyle, self).__init__()
            self.angl = angl
            self.point = point
    
        def drawItemText(self, painter, rect, flags, pal, enabled, text, textRole):
            if not text:
                return
            savedPen = painter.pen()
            if textRole != QPalette.NoRole:
                painter.setPen(QPen(pal.brush(textRole), savedPen.widthF()))
            if not enabled:
                pen = painter.pen()
                painter.setPen(pen)
            painter.translate(self.point)
            painter.rotate(self.angl)
            painter.drawText(rect, flags, text)
            painter.setPen(savedPen)
    

    label = QLabel()
    label.setStyle(myStyle(-45, QPoint(0, 100)))
    
        4
  •  0
  •   SingularRiver    4 年前

    来自@Controlix的答案是一个通用的实现,然而,我得到了一个“递归绘制调用”警告。我能够通过结合@Controlix和@Ivo的方法来解决这个问题。以下是我的实现:

    from PyQt5.Qt import QLabel
    from PyQt5 import QtGui
    
    
    class VerticalLabel(QLabel):
    
        def __init__(self, *args):
            QLabel.__init__(self, *args)
    
        def paintEvent(self, event):
            painter = QtGui.QPainter(self)
            painter.translate(0, self.height())
            painter.rotate(-90)
            painter.drawText(0, self.width()/2, self.text())
            painter.end()