如何在不使用paintEvent的情况下旋转PyQt5 QPushButton?

时间:2016-03-15 13:26:27

标签: python pyqt pyqt5 qpushbutton

或者只是文字。可能吗?

我发现了paintEvent How to rotate a QPushButton?的实现,但在我看来它并不是非常“pythonic”。

1 个答案:

答案 0 :(得分:1)

我不确定你能不能,但可以通过在按钮上使用遮罩并使用位图模拟前景来模拟效果。例如:

    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets

    class MyFrame(QtWidgets.QFrame):
        def __init__(self, parent=None,initials=None):
            QtWidgets.QFrame.__init__(self, parent)
            self.btn = QtWidgets.QPushButton(self)
            self.btn.setIcon(QtGui.QIcon('rotatedBitmap.png'))
            self.btn.setMask(QtGui.QBitmap('rotatedBitmapMask.png'))
            self.btn.setIconSize(QtCore.QSize(156,166))
            self.btn.move(30,30)
            self.btn.resize(156,166)
            self.btn.clicked.connect(self.printthis)

        def printthis(self):
            print('this')

    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        Frame = MyFrame(None)
        Frame.resize(720,600)
        Frame.show()
        app.exec_()

这是一个快速的例子,我不确定我是否可以严格使用相同的位图作为前景和掩码(实际上我不确定掩码的规则)但它应该工作。使用以下图像作为测试。

Rotated Pixmap for a button

以及以下作为面具。

enter image description here