PyQT: 将QLabel旋转为对角放置而非水平放置
我正在开发一个触摸屏应用,界面空间非常有限。我想把一个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
)。