我想旋轉一個QLabel,使其垂直定向。在這裏問了一個類似的問題:PyQT: Rotate a QLabel so that it's positioned diagonally instead of horizontally但答案中的代碼導致遞歸循環問題。PyQt繪製一個垂直標籤
這裏是我使用的代碼,爲什麼在遞歸循環運行的代碼,爲什麼不抽?:
from PyQt4.QtGui import QLabel, QPainter
from PyQt4.QtCore import QSize
from PyQt4 import QtCore, QtGui
import sys
class VerticalLabel(QLabel):
def __init__(self, text = ""):
QtGui.QLabel.__init__(self, text)
self.text = text
def paintEvent(self, event):
painter = QPainter(self)
painter.setPen(QtCore.Qt.black)
painter.translate(0, self.height()-1)
painter.rotate(-90)
self.setGeometry(self.x(), self.y(), self.height(), self.width())
painter.drawText(0, 0, self.text)
print("text: {0}".format(self.text))
painter.end()
def minimumSizeHint(self):
size = QLabel.minimumSizeHint(self)
return QSize(size.height(), size.width())
def sizeHint(self):
size = QLabel.sizeHint(self)
return QSize(size.height(), size.width())
def setText(self, newText):
self.text = newText
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
lbl1 = VerticalLabel('label 1')
lbl2 = VerticalLabel('label 2')
lbl3 = VerticalLabel('label 3')
hBoxLayout = QtGui.QHBoxLayout()
hBoxLayout.addWidget(lbl1)
hBoxLayout.addWidget(lbl2)
hBoxLayout.addWidget(lbl3)
self.setLayout(hBoxLayout)
self.setGeometry(300, 300, 250, 150)
self.show()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
對我來說很好。遞歸可能發生在你調用它的地方,或者甚至可能與這個類沒有關係。 –
@Mad Physicist,在我的機器上運行代碼時,paintEvent被重複調用,直到應用程序關閉。有一個Example類的實例和3個創建的VerticalLabel類的實例。 –
找出你正在做什麼來觸發所有這些繪畫事件。我不認爲這是從paintEvent()中發生的。 –