【发布时间】:2021-05-15 02:28:51
【问题描述】:
我正在尝试在 PyQt 中实现一个矩形颜色选择器工具。我被困在在图像顶部显示矩形的第一步,或者更准确地说,在拖动鼠标后松开鼠标后不再显示矩形。
我第一次尝试自己实现它,我无法删除任何以前绘制的矩形,只剩下一个被矩形覆盖的图像。
然后我发现这段代码几乎完全实现了我正在寻找的东西:
https://www.programmersought.com/article/485354263/
显示相关部分:
def mousePressEvent(self,event):
self.flag = True
self.x0 = event.x()
self.y0 = event.y()
def mouseReleaseEvent(self,event):
self.flag = False
def mouseMoveEvent(self,event):
if self.flag:
self.x1 = event.x()
self.y1 = event.y()
self.update()
def paintEvent(self, event):
super().paintEvent(event)
rect = QRect(self.x0, self.y0, abs(self.x1-self.x0), abs(self.y1-self.y0))
painter = QPainter(self)
painter.setPen(QPen(Qt.red,2,Qt.SolidLine))
painter.drawRect(rect)
这与标签的图像像素图相结合可以满足我的大部分需求。
但是,不幸的是,我对代码的理解不够好,无法从paintEvent 方法中删除之前绘制的矩形,这也是我想在mouseReleaseEvent 中完成的。此代码一直显示绘制的矩形,我希望它在释放鼠标后消失。
我认为在update 期间可能会删除先前绘制的矩形,但只是将self.update() 添加到mouseReleaseEvent 并不能解决问题。
那么,绘制的矩形到底在哪里被删除了,我该如何把它放在发布事件中?
【问题讨论】:
-
好的,我刚刚找到了一个解决方法,我将所有 x0,x1,y0,y1 = 0 设置为然后在鼠标释放事件中调用更新,但这感觉有点脏...