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

Posted

技术标签:

【中文标题】如何在不使用paintEvent的情况下旋转PyQt5 QPushButton?【英文标题】:How to rotate PyQt5 QPushButton without using paintEvent? 【发布时间】:2016-03-15 13:26:27 【问题描述】:

或者只是在其中输入文字。是否可以?

我找到了paintEvent How to rotate a QPushButton? 的实现,但在我看来它不是很“pythonic”。

【问题讨论】:

请看这里:forum.qt.io/topic/9279/moved-how-to-rotate-qpushbutton-63/10 【参考方案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_()

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

以下作为掩码。

【讨论】:

以上是关于如何在不使用paintEvent的情况下旋转PyQt5 QPushButton?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不破坏布局“流程”的情况下使用 css 旋转元素?

如何在不调整大小的情况下旋转 UITextView?

如何在不改变坐标的情况下转换(旋转)svg文本元素?

JavaFX - 如何在不扩大对象的命中框的情况下旋转可移动对象

如何在不使用 transform.Rotate 的情况下在其本地或世界轴上旋转带有第二个四元数的四元数?

在不丢失数据的情况下处理屏幕旋转 - Android