- 43
- 0
问题描述
PyQt5中,想在QGraphicsScene的mousePressEvent中获取鼠标位置,无论点哪,显示的都是[0.0,0.0]
问题出现的环境背景及自己尝试过哪些方法
网上没找到类似的问题
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
#这是继承QGraphicsScene的自定义类
class CARscene(QtWidgets.QGraphicsScene):
def __init__(self, parent=None):
super(CARscene, self).__init__(parent)
def mousePressEvent(self, QMouseEvent):
#这行代码是期望显示坐标,奈何永远都是[0.0, 0.0]
print([QMouseEvent.pos().x(), QMouseEvent.pos().y()])
#这是主窗口的类,继承自QtDesigner设计的界面
class CDataMingQtUi(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super(CDataMingQtUi, self).__init__()
self.setupUi(self)
#CARgraphview 是一个QGraphicView的实例
self.figure = plt.figure()
self.canvas = FigureCanvas(self.figure)
self.graph_sence = CARscene()
self.graph_sence.addWidget(self.canvas)
self.CARgraphview.setScene(self.graph_sence)
你期待的结果是什么?实际看到的错误信息又是什么?
期待显示鼠标单击的坐标
实际显示的确是[0.0, 0.0],无论点哪都是这个值
- 共 0 条
- 全部回答
-
寒闪图寒 普通会员 1楼
在PyQt5中,QGraphicsScene类的mousePressEvent方法会处理鼠标按下和释放事件。如果这个方法的返回值是一个QGraphicsScene::MouseButtonEvent对象,其中鼠标按下事件的坐标是QVector2D对象,鼠标释放事件的坐标是QVector2D对象,那么
QGraphicsScene::mousePressEvent方法将返回一个QVector2D对象,其x坐标和y坐标都是0.0,这是因为在窗口坐标系中,按下和释放事件的坐标都是相对于左上角的。要获取QGraphicsScene对象的鼠标按下事件的鼠标位置,可以使用以下代码:
```python import QGraphicsScene from PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsSceneMouseEvent
class ExampleMainWindow(QMainWindow): def init(self): super().init() self.setScene(new QGraphicsScene())
self.mouseDownButton = QGraphicsSceneMouseEvent(self, None, None, None, Qt.LeftButton, 0, 0) self.mouseDownButton.setScene(self.scene) self.connect(self.mouseDownButton, QtCore.SIGNAL("button_press_event(QGraphicsSceneMouseEvent*)"), self.on_mouse_down) self.connect(self.mouseDownButton, QtCore.SIGNAL("button_release_event(QGraphicsSceneMouseEvent*)"), self.on_mouse_release) def on_mouse_down(self, event): x = event.pos().x() y = event.pos().y() print(f"鼠标按下位置:({x:.2f}, {y:.2f})") self.scene.lockFocus() self.scene.mousePressEvent(QGraphicsSceneMouseEvent(self, event.pos(), event.pos(), event.pos(), Qt.LeftButton, 0, 0)) self.scene.unlockFocus() self.mouseUpButton = QGraphicsSceneMouseEvent(self, None, None, None, Qt.LeftButton, 0, 0) self.mouseUpButton.setScene(self.scene) self.connect(self.mouseUpButton, QtCore.SIGNAL("button_press_event(QGraphicsSceneMouseEvent*)"), self.on_mouse_up) self.connect(self.mouseUpButton, QtCore.SIGNAL("button_release_event(QGraphicsSceneMouseEvent*)"), self.on_mouse_release) def on_mouse_up(self, event): x = event.pos().x() y = event.pos().y() print(f"鼠标释放位置:({x:.2f}, {y:.2f})") self.scene.lockFocus() self.scene.mouseReleaseEvent(QGraphicsSceneMouseEvent(self, event.pos(), event.pos(), event.pos(), Qt.LeftButton, 0, 0)) self.scene.unlockFocus() self.mouseDownButton = QGraphicsSceneMouseEvent(self, None, None, None, Qt.LeftButton, 0, 0) self.mouseDownButton.setScene(self.scene) self.connect(self.mouseDownButton, QtCore.SIGNAL("button_press_event(QGraphicsSceneMouseEvent*)"), self.on_mouse_down) self.connect(self.mouseDownButton, QtCore.SIGNAL("button_release_event(QGraphicsSceneMouseEvent*)"), self.on_mouse_release) if __name__ == "__main__": app = QApplication([]) exmw = ExampleMainWindow() exmw.show() app.exec_()```
在这个示例中,我们创建了一个
QMainWindow类,其中包含一个QGraphicsScene对象。我们使用QGraphicsSceneMouseEvent类创建了两个鼠标按下和释放事件,分别位于窗口左上角。然后,我们获取了这两个事件的坐标,并打印出来。最后,我们获取了鼠标按下和释放事件的上下文,然后使用QGraphicsScene::mousePressEvent方法设置鼠标按下和释放事件的场景,并使用QGraphicsScene::mouseReleaseEvent方法设置鼠标按下和释放事件的场景。当鼠标按下或释放事件发生时,这些方法将被调用,从而获取鼠标按下或释放事件的坐标。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
