python - 在 QPixMap 上绘制矩形:第一次单击定义第一个角,移动鼠标并继续绘制,第二次单击定义形状
问题描述
我想在 QLabel 上的 QPixmap 上方绘制一个矩形(使用 PyQT5)。我的目的是下一个:
- 首次单击:定义左上角。
- 移动鼠标:根据鼠标的位置绘制一个矩形。只有一个矩形。
- 第二次单击:确认右下角的位置并绘制确定的矩形。
实际上,我有一个代码,允许执行第一次单击和第二次单击的操作,但在移动鼠标时不能绘图。我使用了paintEvent 和 mousePresEvent。
pixmap_ed = QPixmap(f"{self.image}")
pixmap_ed_scaled = pixmap_ed.scaled(int(self.QLabel.width()), int(self.QLabel.height()), QtCore.Qt.KeepAspectRatio)
self.QLabel.setPixmap(pixmap_ed_scaled)
def paintEvent(self,event):
if self.flag_dibujar == True and self.primer_click == 1 and self.segundo_click == 1:
painter = QPainter(self.QLabel.pixmap())
pen = QPen()
pen.setColor(QtGui.QColor('green'))
pen.setWidth(3)
painter.setPen(pen)
painter.drawRect(self.beginX,self.beginY, self.endX-self.beginX,self.endY-self.beginY)
self.update()
self.QLabel.update()
self.primer_click = 0
self.segundo_click = 0
def mousePresEvent(self, event):
if self.flag_dibujar == True:
if self.primer_click == 0 and event.button() == QtCore.Qt.LeftButton:
self.begin = event.pos()
self.beginX = int(self.begin.x())
self.beginY= int(self.begin.y())
self.QLabel.update()
self.primer_click = 1
else:
self.end = event.pos()
self.endX = int(self.end.x())
self.endY = int(self.end.y())
self.QLabel.update()
self.segundo_click = 1
解决方案
推荐阅读
- firebase - 如何在 Go 服务器应用程序中配置凭据文件以使用 Firebase 模拟器
- javascript - 错误:在渲染器中加载非上下文感知本机模块:@serialport\bindings\build\Release\bindings.node'
- arrays - 这个用于查找方阵的对角差的 Swift 代码有什么问题?
- java - systemd 找不到 Java
- java - 这是否被视为循环依赖(这是一种好习惯)?
- swift - Swift Core-Data 从属性列表中删除项目
- ios - 将数据中的字符串编码为 utf8 字符串不等于预期值?
- ajax - 返回Json时dotnet中的Ajax错误对象对象
- python - 为什么我在 PyTorch 中用于降噪的自动编码器学会了将所有内容归零?
- c# - 读取 FileStream 超时