PyQT: 将QLabel旋转为对角放置而非水平放置

3 投票
5 回答
13039 浏览
提问于 2025-04-16 04:23

我正在开发一个触摸屏应用,界面空间非常有限。我想把一个QLabel稍微旋转一下,让它变成竖着的,或者稍微倾斜一点。有没有什么建议?我在QLabel的接口上找不到相关的信息。

非常感谢!

5 个回答

2

试试这个

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)))
2

我参考了这篇帖子,做了一个我觉得可能更好的解决方案。下面是我的代码:

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())
5

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)。

撰写回答