如何旋转QPushButton?

我想-使用Python和Qt4–

旋转QPushButton(或至少它的文本),使其可以垂直站立。我在网上看过一些文档,但是我从中没多大意义-

它在C语言中,而且我是C文盲。

根据我的阅读,需要重新实现paintEvent()处理程序,实例化和旋转QPainter()。但是我不知道怎么为我只需要的一个QString或QPushButton做到这一点。我假设QPaintEvent会像信号一样具有“发送者”属性,但实际上没有。我似乎可以从此事件中得到的只是QRect或QRegion。

如何找到特定于我的按钮或其标签的事件?

或者,因为这确实是问题,如何旋转QPushButton?

Mru,在下面提出了一些C ++示例,它完全重新实现了QPushButton。由于我对C

++一无所知,并且由于我实际上不需要完全重新实现painEvent(),因此基于该示例,我尝试在Python中重新实现处理程序。

这是我翻译的内容,但不起作用:\

#!/usr/bin/env python

from PyQt4 import QtGui, QtCore

import sys

class RotatedButton(QtGui.QPushButton):

def __init__(self, text, parent, orientation = "west"):

QtGui.QPushButton.__init__(self, text, parent)

self.orientation = orientation

def paintEvent(self, event):

painter = QtGui.QStylePainter(self)

if self.orientation == 'west':

painter.rotate(90)

elif self.orientation == 'east':

painter.rotate(270)

else:

raise TypeError

painter.drawControl(QtGui.QStyle.CE_PushButton, self.getSyleOptions())

def getSyleOptions(self):

options = QtGui.QStyleOptionButton()

options.initFrom(self)

size = options.rect.size()

size.transpose()

options.rect.setSize(size)

options.features = QtGui.QStyleOptionButton.None

options.text = self.text()

options.icon = self.icon()

options.iconSize = self.iconSize()

return options

class Main(QtGui.QFrame):

def __init__(self):

QtGui.QFrame.__init__(self)

self.count = 0

self.application = QtCore.QCoreApplication.instance()

self.layout = QtGui.QHBoxLayout()

self.button = RotatedButton("Hello", self, orientation="west")

self.layout.addWidget(self.button)

self.setLayout(self.layout)

if __name__ == '__main__':

application = QtGui.QApplication(sys.argv)

application.main = Main()

application.main.show()

sys.exit(application.exec_())

回答:

根据您的代码:

#!/usr/bin/env python

from PyQt4 import QtGui, QtCore

import sys

class RotatedButton(QtGui.QPushButton):

def __init__(self, text, parent, orientation = "west"):

super(RotatedButton,self).__init__(text, parent)

self.orientation = orientation

def paintEvent(self, event):

painter = QtGui.QStylePainter(self)

painter.rotate(90)

painter.translate(0, -1 * self.width());

painter.drawControl(QtGui.QStyle.CE_PushButton, self.getSyleOptions())

def minimumSizeHint(self):

size = super(RotatedButton, self).minimumSizeHint()

size.transpose()

return size

def sizeHint(self):

size = super(RotatedButton, self).sizeHint()

size.transpose()

return size

def getSyleOptions(self):

options = QtGui.QStyleOptionButton()

options.initFrom(self)

size = options.rect.size()

size.transpose()

options.rect.setSize(size)

options.features = QtGui.QStyleOptionButton.None

if self.isFlat():

options.features |= QtGui.QStyleOptionButton.Flat

if self.menu():

options.features |= QtGui.QStyleOptionButton.HasMenu

if self.autoDefault() or self.isDefault():

options.features |= QtGui.QStyleOptionButton.AutoDefaultButton

if self.isDefault():

options.features |= QtGui.QStyleOptionButton.DefaultButton

if self.isDown() or (self.menu() and self.menu().isVisible()):

options.state |= QtGui.QStyle.State_Sunken

if self.isChecked():

options.state |= QtGui.QStyle.State_On

if not self.isFlat() and not self.isDown():

options.state |= QtGui.QStyle.State_Raised

options.text = self.text()

options.icon = self.icon()

options.iconSize = self.iconSize()

return options

class Main(QtGui.QFrame):

def __init__(self):

QtGui.QFrame.__init__(self)

self.application = QtCore.QCoreApplication.instance()

self.layout = QtGui.QHBoxLayout()

self.button = RotatedButton("Hello", self, orientation="west")

self.layout.addWidget(self.button)

self.setLayout(self.layout)

if __name__ == '__main__':

application = QtGui.QApplication(sys.argv)

application.main = Main()

application.main.show()

sys.exit(application.exec_())

以上是 如何旋转QPushButton? 的全部内容, 来源链接: utcz.com/qa/405874.html

回到顶部