Pyqt:如何擦除paintEvent中绘制的文本?

时间:2018-01-03 13:01:52

标签: python pyqt pyqt5 qwidget qpainter

我创建了一个继承QWidget的Roatatable Text类,它运行正常。 但是,当我试图删除此文本时 label.destroy(), 它并没有消失。

我尝试使用QPainter.eraseRect(),将painter更改为self.painter和 执行label.painter.eraseRect()。 但我失败了。

以下是代码:

class RotatedText(QtWidgets.QWidget):
    def __init__(self, x, y, angle, text, color):
        QtWidgets.QWidget.__init__(self)
        # Setting variables...
        self.setGeometry(0, 0, 1920, 1080)
        # I did this because texts ain't showing if they're too far away from (0, 0)

    def paintEvent(self, event):
        painter = QtGui.QPainter(self)
        painter.translate(self.x, self.y)
        painter.rotate(self.angle)
        painter.setPen(QtGui.QPen(QtGui.QColor(self.color_r, self.color_g, self.color_b)))
        painter.setFont(QtGui.QFont("나눔고딕", 20))
        painter.drawText(0, 0, self.text)
        painter.end()

class MainWindow(QtWidgets.QDialog):
    def __init__(self, parent=None):
        label = RotatedText(50, 50, 45, "hi", (0, 0, 0))
        label.setParent(self)
        label.show()

(删除与此无关的其他代码)

使用drawText()绘制的文本位于小部件上,因此我认为销毁小部件也可以删除文本... 我该如何删除它?

用新类替换此类可以继承QLabel。它会更容易使用但我没能成功,所以我正在使用这个类。

P.S。只删除已绘制的所有内容对我来说都不合适,因为有很多文本而且我只想删除一个。

1 个答案:

答案 0 :(得分:0)

设置self.text = "" 并致电update()。 非常感谢eyllanesc!

  • 我在其他小部件上尝试了destroy(),但它似乎没有被“破坏”。相反,deleteLater()起作用了。它也适用于我制作的小部件。