python之pyQt5实例:鼠标获取label控件图片上的点

1、鼠标点击就可以,不区分左键、中键和右键

from PyQt5.QtWidgets import QApplication, QLabel
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
​
class MyLabel(QLabel):
    def mousePressEvent(self, event):
        if self.pixmap() is not None:
            x = event.x()
            y = event.y()
            print("鼠标点击的坐标:", x, y)
​
app = QApplication([])
​
label = MyLabel()
​
# 通过QPixmap设置图片
pixmap = QPixmap(r'xxx.png')
label.setPixmap(pixmap)
​
# 设置允许鼠标点击事件传递到下层控件
label.setAttribute(Qt.WA_TransparentForMouseEvents)
label.show()
​
app.exec_()
​

2、只要鼠标左键

from PyQt5.QtWidgets import QApplication, QLabel
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
​
class MyLabel(QLabel):
    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton and self.pixmap() is not None:
            x = event.x()
            y = event.y()
            print("鼠标左键点击的坐标:", x, y)
​
app = QApplication([])
​
label = MyLabel()
​
# 通过QPixmap设置图片
pixmap = QPixmap(r'xxx.png')
label.setPixmap(pixmap)
​
# 设置允许鼠标点击事件传递到下层控件
label.setAttribute(Qt.WA_TransparentForMouseEvents)
label.show()
​
app.exec_()

3、鼠标左键+把点标记出来

from PyQt5.QtWidgets import QApplication, QLabel
from PyQt5.QtGui import QPixmap, QPainter, QPen
from PyQt5.QtCore import Qt,QPoint
​
​
class MyLabel(QLabel):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.point = None
​
    def setPoint(self, point):
        self.point = point
        self.update()
​
    def paintEvent(self, event):
        super().paintEvent(event)
        if self.point:
            painter = QPainter(self)
            pen = QPen(Qt.red, 10)
            painter.setPen(pen)
            painter.drawPoint(self.point)
​
    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton and self.pixmap() is not None:
            x = event.x()
            y = event.y()
            self.setPoint(QPoint(x, y))
            print("鼠标左键点击的坐标:", x, y)
​
​
app = QApplication([])
​
label = MyLabel()
​
# 通过QPixmap设置图片
pixmap = QPixmap(r'xxx.png')
label.setPixmap(pixmap)
​
# 设置允许鼠标点击事件传递到下层控件
label.setAttribute(Qt.WA_TransparentForMouseEvents)
label.show()
​
app.exec_()

 4、鼠标左键+把点标记出来+点击下一个点时,前一个点的标记要保留

from PyQt5.QtWidgets import QApplication, QLabel
from PyQt5.QtGui import QPixmap, QPainter, QPen
from PyQt5.QtCore import Qt, QPoint
​
class MyLabel(QLabel):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.points = []
​
    def setPoints(self, points):
        self.points = points
        self.update()
​
    def paintEvent(self, event):
        super().paintEvent(event)
        if self.pixmap() is not None:
            painter = QPainter(self)
            pen = QPen(Qt.red, 10)
            painter.setPen(pen)
            for point in self.points:
                painter.drawPoint(point)
​
    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton and self.pixmap() is not None:
            x = event.x()
            y = event.y()
            point = QPoint(x, y)
            self.points.append(point)
            self.update()
            print("鼠标左键点击的坐标:", x, y)
​
app = QApplication([])
​
label = MyLabel()
​
# 通过QPixmap设置图片
pixmap = QPixmap(r'xxx.png')
label.setPixmap(pixmap)
​
# 设置允许鼠标点击事件传递到下层控件
label.setAttribute(Qt.WA_TransparentForMouseEvents)
label.show()
​
app.exec_()

5、鼠标左键+把点标记出来+点击下一个点时,前一个点的标记要保留+文件对话框选择图片

import sys
from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QFileDialog, QWidget
from PyQt5.QtGui import QPixmap, QPainter, QPen
from PyQt5.QtCore import Qt, QPoint


class MyLabel(QLabel):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.points = []

    def setPoints(self, points):
        self.points = points
        self.update()

    def paintEvent(self, event):
        super().paintEvent(event)
        if self.pixmap() is not None:
            painter = QPainter(self)
            pen = QPen(Qt.red, 4)
            painter.setPen(pen)
            for point in self.points:
                painter.drawPoint(point)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton and self.pixmap() is not None:
            x = event.x()
            y = event.y()
            point = QPoint(x, y)
            self.points.append(point)
            self.update()
            print("鼠标左键点击的坐标:", x, y)


def openImage():
    file_dialog = QFileDialog()
    image_path, _ = file_dialog.getOpenFileName(None, "打开图像", "", "图像文件 (*.jpg *.png)")

    if image_path:
        pixmap = QPixmap(image_path)
        label.setPixmap(pixmap.scaled(label.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation))


if __name__ == "__main__":
    app = QApplication(sys.argv)

    window_width = 800
    window_height = 600

    window = QWidget()
    window.setWindowTitle("图像查看器")
    window.resize(window_width, window_height)

    label = MyLabel(window)
    label.setGeometry(50, 50, window_width - 100, window_height - 200)
    label.setAlignment(Qt.AlignCenter)

    button = QPushButton("选择图片", window)
    button.setGeometry(50, window_height - 125, 100, 30)
    button.clicked.connect(openImage)

    window.show()

    sys.exit(app.exec_())

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值