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()
起作用了。它也适用于我制作的小部件。
我制作了一个继承了 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()
起作用了。它也适用于我制作的小部件。