Я бы хотел --- с 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_())