生成一个pyqt5的label类,它可以通过鼠标事件在label中画多个框,画出第二个框时第一个框仍然存在
时间: 2024-05-11 20:16:22 浏览: 108
好的,我明白你的问题了。为了生成一个 PyQT5 的 Label 类,可以使用如下代码:
```python
from PyQt5.QtWidgets import QLabel
class CustomLabel(QLabel):
def __init__(self, parent=None):
super(CustomLabel, self).__init__(parent)
self.rects = []
self.current_rect = None
def mousePressEvent(self, ev):
self.current_rect = QRect()
self.current_rect.setTopLeft(ev.pos())
def mouseMoveEvent(self, ev):
if not self.current_rect:
return
self.current_rect.setBottomRight(ev.pos())
self.update()
def mouseReleaseEvent(self, ev):
if not self.current_rect:
return
self.rects.append(self.current_rect)
self.current_rect = None
self.update()
def paintEvent(self, ev):
super(CustomLabel, self).paintEvent(ev)
painter = QPainter(self)
pen = QPen(QColor(255, 0, 0), 2)
painter.setPen(pen)
for rect in self.rects:
painter.drawRect(rect)
if self.current_rect:
painter.drawRect(self.current_rect)
```
这个类继承了 QLabel 类,并添加了一些鼠标事件处理函数。当鼠标按下时,它将创建一个新的矩形,并记录它的左上角坐标。接着,当鼠标移动时,它将更新矩形的右下角坐标,并重新绘制 Label。最后,当鼠标释放时,它将保存当前矩形并将其添加到列表中。最终的绘制操作将包括所有矩形并绘制当前正在拖动的矩形。
为了保证之前绘制的矩形不被清除,我们可以在绘制前绘制所有的矩形。另外,我们还需要记录当前正在拖动的矩形以便它能够被正确地绘制。
希望这可以帮助你解决问题。如果还有其他问题,请告诉我。
阅读全文