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

Pyqt: How do I erase a text drawn at paintEvent?

我制作了一个继承了 QWidget 的可旋转文本 class,它工作正常。 但是当我试图用 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() 绘制的文本在小部件上,所以我认为破坏小部件也可以删除文本... 我如何删除它?

把这个class换成新的class继承QLabel就OK了。它会更容易使用,但我没有做到,所以我正在使用这个 class.

p.s。只是擦掉所有已经画过的东西对我来说不是合适的解决方案,因为有很多文本,我只想擦掉一个。

设置self.text = "" 并且调用 update() 有效。 非常感谢 eyllanesc!

  • 我在其他小部件上试过destroy(),但似乎不是'destroyed'。相反,deleteLater() 起作用了。它也适用于我制作的小部件。