python如何获取鼠标的坐标_python-Pyside2如何获取鼠标位置?

本文介绍了在PySide2中如何获取鼠标点击事件时的坐标,并将其转换为相对于窗口的位置。通过覆盖`mousePressEvent`方法或者使用事件过滤器,结合`mapToGlobal()`和`mapFromGlobal()`函数,可以实现这一功能。示例代码展示了两种实现方式。
摘要由CSDN通过智能技术生成

据我了解,如果您单击小部件中的任意位置,则希望在窗口上获得位置.

为了解决这个问题,逻辑如下:

>获取鼠标相对于小部件的位置

>将位置转换为全局位置,即相对于屏幕.

>将该全局位置转换为相对于窗口的位置.

对于第一步,如果使用mousePressEvent(),event.pos()返回相对于小部件的位置.

第二步,您必须使用mapToGlobal()将相对于小部件的位置转换为global.

对于第三步,使用window的mapFromGlobal().

def mousePressEvent(self, event):

p = event.pos() # relative to widget

gp = self.mapToGlobal(p) # relative to screen

rw = self.window().mapFromGlobal(gp) # relative to window

print("position relative to window: ", rw)

super(Widget, self).mousePressEvent(event)

更新:

QGraphicsScene不是小部件,它不是可视元素,尽管它是可视元素QGraphicsView表示的一部分.为了让您理解,我将用一个类比向您解释,假设有一个摄影师记录场景,在该示例中QGraphicsScene是场景,而QGraphicsView是摄像机记录的内容,也就是说,它显示了一部分QGraphicsScene ,因此可能会有另一个摄影师从另一个角度记录场景,因此它将从另一个角度显示同一场景,因此场景的位置取决于相机,因此如果您当前的问题等同于说出哪个位置P点相对于相机的第i个,并且不可能从场景中获取,应该从相机中获取.

因此,总而言之,您不应使用Q

OpenCV-Python是一个Python接口库,用于使用OpenCV的功能,但它本身并不是直接操作Qt框架的QWidget。如果你想在PyQt5或PySide等基于Qt的GUI应用程序中使用OpenCV,并且需要监控鼠标事件,你需要结合两者进行。 首先,你需要导入必要的库,如`cv2`, `PyQt5.QtWidgets` 和 `PyQt5.QtGui`。然后创建一个继承自`QWidget`的窗口,并将OpenCV窗口嵌套在其中。你可以通过设置鼠标移动和点击事件处理器来监控鼠标活动: ```python import cv2 from PyQt5.QtWidgets import QApplication, QWidget, QLabel from PyQt5.QtGui import QImage, QPixmap class CVMouseEventWindow(QWidget): def __init__(self): super().__init__() self.opencv_window = QLabel(self) self.setMouseTracking(True) # 开启鼠标跟踪 # 创建OpenCV窗口并显示图像 cap = cv2.VideoCapture(0) # 使用摄像头,0通常表示默认设备 while True: ret, frame = cap.read() if not ret: break image = QImage(frame.data, frame.shape[1], frame.shape[0], QImage.Format_RGB888) pixmap = QPixmap.fromImage(image) self.opencv_window.setPixmap(pixmap) # 监听鼠标事件 pos = self.mapToGlobal(QPoint(self.mouseMoveEvent.pos().x(), self.mouseMoveEvent.pos().y())) x, y = int(pos.x()), int(pos.y()) cv2.circle(frame, (x, y), 5, (0, 255, 0), -1) # 在原图上标记鼠标位置 cv2.imshow("OpenCV Window", frame) key = cv2.waitKey(1) if key == ord('q'): break cap.release() cv2.destroyAllWindows() if __name__ == "__main__": app = QApplication([]) window = CVMouseEventWindow() window.show() app.exec_() ``` 在这个例子中,当鼠标在OpenCV窗口内移动或点击时,会在原图上标记出鼠标位置。注意,`mapToGlobal`函数用于将鼠标坐标从窗口本地空间转换到屏幕全局空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值