【发布时间】:2018-01-03 13:01:52
【问题描述】:
我创建了一个继承 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的新类替换这个类就可以了。它会更容易使用,但我没有成功,所以我正在使用这个类。
附言只擦除所有已绘制的内容对我来说不是合适的解决方案,因为有很多文本,我只想擦除一个。
【问题讨论】:
-
请解释清楚,有很多文本是什么意思?你能用一张图片来说明这个问题吗?
-
我的意思是我通过有很多文本创建了很多这个类的实例。因此,擦除使用 QPainter 制作的所有内容是不合适的。 (抱歉解释不佳,我的母语不是英语)
-
你为什么不设置
self.text = ""并调用update()再次绘制一个空文本? -
哦,成功了!非常感谢!不知道有更新功能
-
update()内部调用paintEvent():P
标签: python pyqt pyqt5 qwidget qpainter