私は---PythonとQt4---でQPushButton(または少なくともそのテキスト)を回転させて垂直に立てることができるようにしたいと思います。私はいくつかのドキュメントをオンラインで見ましたが、それを理解することはできませんでした---それはCであり、私はC-読み書きができません。
しかし、私が読んだことから、 paintEvent()ハンドラーを再実装し、 QPainter()をインスタンス化して回転させる必要があります。しかし、私が理解できないのは、必要な1つのQStringまたはQPushButtonに対してこれを行う方法です。QPaintEventには、シグナルと同様に「送信者」属性があると想定しましたが、そうではありません。このイベントから得られると思われるのは、QRectまたはQRegionだけです。
ボタンまたはそのラベルに固有のイベントを見つけるにはどうすればよいですか?
または、それが本当に問題なので、QPushButtonを回転させる方法は?
Mruは、QPushButtonを完全に再実装するC++の例を以下に示します。私は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_())